This is a tutorial on Entity Framework from Plural sight course: Getting Started with Entity Framework 6
It will have some of my notes to make sense of some of the concept I've learnt.
Goto: http://thedatafarm.com/data-access/installing-ef-power-tools-into-vs2015/ Download the power tool, which allows VS2015 to produce Table Relationship diagram. First ensure the DbContext project is the start up and then right click on the file to see the option to view entity. This can help with making sure the tables have the correct relation ship.
Database Migration Code-First: This updates the database schema to align with changes made to the model. EF API can compare an existing model to its previous incarnation and figure out what needs to be change to align with the latest model.
Steps 1. Enable Migrations (cmd ==> Enable-Migrations) Checking if the context targets an existing database... Code First Migrations enabled for project NinjaDomain.DataModel. This will create a Migrations folder with a Configuration file. 2. Let Migrations create a database 3. Let Migrations change the database
Migration is a 3 steps process: Define/Change Model ==> Create a Migration File ==> Apply Migration to Database Add-Migration Initial ( Creates a file called DateTimeStamp_Initial ) Scaffolding migration 'Initial'. The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration Initial' again. Update-Database -Script ==> generate SQL statements file -Verbose ==> writes to the output of everything its doing ( Step by Step )
PM> Update-Database -Verbose Using StartUp project 'NinjaDomain.DataModel'. Using NuGet project 'NinjaDomain.DataModel'. Specify the '-Verbose' flag to view the SQL statements being applied to the target database. Target database is: 'NinjaDb' (DataSource: (LocalDb)\MSSQLLocalDB, Provider: System.Data.SqlClient, Origin: Configuration). Applying explicit migrations: [201610121329508_Initial]. Applying explicit migration: 201610121329508_Initial. CREATE TABLE [dbo].[Clans] ( [Id] [int] NOT NULL IDENTITY, [ClanName] nvarchar, CONSTRAINT [PK_dbo.Clans] PRIMARY KEY ([Id]) ) CREATE TABLE [dbo].[Ninjas] ( [Id] [int] NOT NULL IDENTITY, [Name] nvarchar, [ServedInOniwaban] [bit] NOT NULL, [ClanId] [int] NOT NULL, CONSTRAINT [PK_dbo.Ninjas] PRIMARY KEY ([Id]) ) CREATE INDEX [IX_ClanId] ON [dbo].Ninjas CREATE TABLE [dbo].[NinjaEquipments] ( [Id] [int] NOT NULL IDENTITY, [Name] nvarchar, [Type] [int] NOT NULL, [Ninja_Id] [int] NOT NULL, CONSTRAINT [PK_dbo.NinjaEquipments] PRIMARY KEY ([Id]) ) CREATE INDEX [IX_Ninja_Id] ON [dbo].NinjaEquipments ALTER TABLE [dbo].[Ninjas] ADD CONSTRAINT [FK_dbo.Ninjas_dbo.Clans_ClanId] FOREIGN KEY ([ClanId]) REFERENCES [dbo].[Clans] ([Id]) ON DELETE CASCADE ALTER TABLE [dbo].[NinjaEquipments] ADD CONSTRAINT [FK_dbo.NinjaEquipments_dbo.Ninjas_Ninja_Id] FOREIGN KEY ([Ninja_Id]) REFERENCES [dbo].[Ninjas] ([Id]) ON DELETE CASCADE CREATE TABLE [dbo].[__MigrationHistory] ( [MigrationId] nvarchar NOT NULL, [ContextKey] nvarchar NOT NULL, [Model] varbinary NOT NULL, [ProductVersion] nvarchar NOT NULL, CONSTRAINT [PK_dbo.__MigrationHistory] PRIMARY KEY ([MigrationId], [ContextKey]) ) INSERT [dbo].[__MigrationHistory]([MigrationId], [ContextKey], [Model], [ProductVersion]) VALUES (N'201610121329508_Initial', N'NinjaDomain.DataModel.Migrations.Configuration', 0x1F8B0800000000000400ED5ACD6EE33610BE17E83B083AB54536CACFA50DEC5D649DA408BA8E177176DB5B404B63872D4569452A6BA3E893F5D047EA2B74A87F91A22D3B3F0D168B1C62539CE170E69BE1F093FFFDFB9FC19B65C89C7B48048DF8D03DDC3F701DE07E1450BE18BAA99CBFFAD17DF3FADB6F06E741B8743E96F38ED53C94E462E8DE49199F789EF0EF2024623FA47E1289682EF7FD28F44810794707073F7987871EA00A177539CEE03AE59286907DC1AFA388FB10CB94B071140013C5383E99665A9D2B128288890F43F78AF2DFC9591412CAF7CF88249984EB9C324AD09829B0B9EB10CE2349249A7AF241C05426115F4C631C20EC661503CE9B1326A0D8C2493DBDEF6E0E8ED46EBC5AB054E5A742A26DDB293C3C2EDCE3E9E23B39D9ADDC870E3C4747CB95DA75E6C4A13B6204D5EA0B9D8C58A226B5FD8B738500A1FEF33DA7E3C95E0509448EFADB734629936902430EA94C08DB73DEA73346FD5F607513FD017CC853C69A16A28DF8AC358043EF93288644AEAE615ED87D19B88ED796F374C14AAC2193EFEA92CBE323D7B9C2C5C98C4105808607A6324AE067E0901009C17B2225245CE980CC85C6EADA5ACA47EA53B922A20E73C875C664F90EF842DE0D5DFCE83A17740941395258F181534C391492490AC64257E49E2E321BB525B38008D7B906963D167734CE53603F7B749BC7FA2289C2EB889502D9E8ED0D491620D1D8C878348DD2C4D7CC18783590D6C22BD3B32DBEB2B1AF005B0FB0A70197B6C814927B082EF984D3CF64A6D0932FF8364294A8AFC6063767C56627F5057C8EE75DE05E62BA03EE6526F435E2FC534AE3106336F9CC21B09B53CDBB2D7242334C7BDE9D91FAA487E766A571A724ADA4BF66EB0BC856A5BE5A4401AF0A4FFE64E7442B10FB58D0EECC3E1BFEFB413B0D1BC0D6B67D292E1859D45DDE763857BA45DB938F0A760C7100095B21249A606C47660CE10C9232CC587C5DE72361297E3934A2D89AFB2B9058F58DC5ECA3F5B327A9FC0C24A9A61F9BEECF1DDD1C3C1522F269E6C9265CF2F2DB5EEC9C078EBD16D7B82D603446FFD1183D86211FBA3F18B677AAABEA66AD2E3F08DADA0E5DBDA84CF8193090E09CFA79AB3E22C227819926E885A03D82750812550808C3BB8BC060532ECDA245B94F63C2AC366B123D0B9DB2A8D2AD3F398318B8AA5156BFF759B43CB6CD852BFD9A8B367964E03560D3034D7A89590B046BBDD110D638FBB6849AF5B0DE80E1C7439DD581798544A74B747995D999356A10965D273D5E8B8B22288AA346DFBE523A05D90004DE34EA6ADCCA34C3776DE1F29E6248172EDB20DE885AB786C6044D55C3659A3945B3D89860B6927AE8D656B3CAEA7ABF46F6ACAD5F0D0585B77540B477D377A7C6616DD9F3DA8CEB9F738D6D58E3D23FBF367A758D57CAE6A14A8D9A56F2725EA9E49F3C0B0135189338C673BA41481523CE3467A346AFA6DB733461AEC3F345075553595BAD848D285980F61497464B2F6822A462C16644353AA32034A6B50A8125D1CAA59AB96E06AC4CBD72B6FADCC099CEC9ED77E550EDC10BDC940A78B63FD0C06F8A655C206124E9E8E947114B436E3F2EEDD23569D3D4518F9A9A069E66BF71421A8E32CA7ADBEBBD625280FFE141E9CCED1E51B1C83D4D58CC90D8C261D360F2184D6DE6D3ED20A3EFCED62EFD6F70A92BEF2321C6AAB02F74D62878A918CA2F934D0DF9C8F347B97DC4755406E38CDF2EA8A5D47691536778176F6039CB4DAFF58A7AAEA3FB32D2306047DBAC77A29D1169B74A6F55CC501B1D8B3EA5025AD5B9681DCAA0E81636BF4733DA877C8AEBA0EDF73450ADC374252484196AF6A79FD888D1AC972B278C09A7731032E736DCA383C323ED3DDCCB7927E60911B01E2FC69E9D89A4CAA31BB9C61D58F72601C9EF49E2DF91E4BB902CBF6F6A3349C62D5FF47C19FEDAD157FD5F9FCCA87CE0AB13DA49D85FF2009643F7CF4CE4C4B9FCED3697DA73260966E88973E0FCB561E15DDF1E7C8DBC958ACF2CDDD690EA98DB2EDEA5DC23447C275E37A7519E937BD598835D78E49DE85BCB75F66918DB2F91A57D4EB6740DC3F4205A7877E2FFD9A0B3EEAA66AEB8AEBD7E74147553D52691B5998BB652D179173B7483598481CE6B60379DDAC952DB49EA2EC5164AB253F3362CB675AD6A8EB9E85351DD4D6FD7FCDC4642D7A46E5F389FBDD9E0B535C57E6B7E12C2DABCE6615A367E5489A541D045AD42FDC49283DF4AC86ACE259F476565D02C2AA768DDCA182409305B4F1349E7C497F8D80721B25F3914AF92CFC359D609A7324E256E19C2196BFD6A42D59775EB67AC7CDBE6C124CE7E8EF0185B4033296E0126FC6D4A5950D97DD1D1305954A8C255F4A22A9652F5A48B55A5E92AE23D1515EEABEAED0D8431436562C2A7E41E76B1ED838077B020FEAABCADDB956C0E44DBED83334A16090945A1A396C7AF88E1205CBEFE0FAF5122025B2C0000 , N'6.1.3-40302')
Running Seed method.
***** MODEL CHANGE *****
PM> Update-Database -Verbose Using StartUp project 'NinjaDomain.DataModel'. Using NuGet project 'NinjaDomain.DataModel'. Specify the '-Verbose' flag to view the SQL statements being applied to the target database. Target database is: 'NinjaDb' (DataSource: (LocalDb)\MSSQLLocalDB, Provider: System.Data.SqlClient, Origin: Configuration). Applying explicit migrations: [201610121407468_AddBirthdayToNinja]. Applying explicit migration: 201610121407468_AddBirthdayToNinja. ALTER TABLE [dbo].[Ninjas] ADD [DateOfBirth] [datetime] NOT NULL DEFAULT '1900-01-01T00:00:00.000' INSERT [dbo].[__MigrationHistory]([MigrationId], [ContextKey], [Model], [ProductVersion]) VALUES (N'201610121407468_AddBirthdayToNinja', N'NinjaDomain.DataModel.Migrations.Configuration', 0x1F8B0800000000000400ED5ACD6EE33610BE17E83B083AB545364AB29736B07791759222E8265EC4D96D6F012D8D1DB614A58A54D646D127EBA18FD457E850FF224559767E102C1639C4E6CF7038F3CD70F8D1FFFDF3EFE8ED2A64CE3D2482467CEC1EEE1FB80E703F0A285F8EDD542E5EFDE8BE7DF3ED37A3B3205C399FCA71AFD5389CC9C5D8BD93323EF63CE1DF4148C47E48FD2412D142EEFB51E89120F28E0E0E7EF20E0F3D40112ECA729CD175CA250D21FB825F2711F7219629619751004C14EDD833CBA43A57240411131FC6EE15E5BF93D3282494EF9F1249B219AE73C228416566C016AE43388F2491A8EAF147013399447C398BB181B09B750C386E419880620BC7F5F0A1BB393852BBF1EA89A5283F151275DB4EE0E1EBC23C9E3E7D2723BB95F9D080676868B956BBCE8C3876278CA0587DA1E3094BD4A0B67D71AC1020D47FBEE774F4EC559040E4A8BF3D679232992630E690CA84B03DE7433A67D4FF05D637D11FC0C73C65ACA921EA887DAD066CFA90443124727D0D8B42EF8BC075BCF63C4F9F584D6BCCC97775C1E5EB23D7B9C2C5C99C410580860566324AE067E0901009C1072225245CC980CC84C6EADA5ACA46EA53B922A20E63C8752EC9EA3DF0A5BC1BBBF8D175CEE90A82B2A5D0E223A7187238492629180B5D917BBACC74D496CC1C225CE71A58D62DEE689C87C07ED6759BFBFA3C89C2EB889513B2D6DB1B922C41A2B291D1358BD2C4D7D4187935907AE195C9D9165F59DB5780F503EC69C0A52D3283E41E820B3EE5F433992BF4E40BBE8B1025EAABB1C1CD51B1D948FD3230CBC374F18E26F2AE14A49A6EA8B2C72659D6E0C9636397D029E3A32374CAA81AAAC4D99F298D43F4FFF43387C0AE4E35EEB6882F4D31ADBF3BBAF5410F8FF34AE24E015FCDFE1AF92F20F295F86A1105BCCA3D79CFCE815620F6B1A0DD197D36FC0F83761A3680AD6DFB429C33B2AC2BC6ED70AE648BB6251F15ECE8E20012B6464834C1D8F6CC258473484A376322779D4F84A5F8E5D0F0626BECAF4062558316A38FFA474F53F91948520D7F6D9A3F3774B3F14488C8A799259B70C9D36F7BB1331E38F65C5CE3B680D125DA8FC6683174F9D8FDC1D0BD535C95376B71F941D09676E8EA4965CA4F818104E7C4CFCBFE09113E09CC30412B04ED16CC4390A8444018DE83043A9B7269262DCA7D1A1366D5599B3130D1298D2AD97ACF29C4C0558EB2DA7DC8A26509602E5CC9D74CB4C92223AF019B0168D2534C2F10ACF9464358E3ECDB126AD6C37A03861F0F755603E619128D2ED1E4556467DAA84658759DF478C52E92A0288E1A7DFB4AE80C640310786BA9B3712BD20CDBB52797771E637661B20DD31B5EEB96D018A0896A984C53A728161B03CC5252775D6F36ABB4AEF76B444F6FFE6A0828ACAD03A2BD9BA13B350E6BCB9E7B236E78CC35B661F5CBF0F8DA68D51EAB94C543151A3545E5E51C55C9657916326B7449E218CFE906B955B438B39CD99ABC9A6DCFF784B90CCF171DB44FA56DB51216A264095A2F2E8D9A9ED34448C5A8CD892A742641680C6B25024BA0954B3563DD7458197AE568F5B981339DDFDBEF8AA1DA82E7B829E5F06C7FA081DF9C96F18A8491A4A3A69F442C0DB9FDB8B4CFAE09A0A68CBAD59434F234FD8D13D2309491D6DB561FE49302FC0F774A676C0FF08A65DED3B8C57489CD1D36092627D29466F66E07197D77B672C92EA5C58F3445B53A5E0CFCEA4CFE4808B40A1C0AC51E012F1593F9E5B429216F797E2FB78FCC8E4C63D40CDB39B59CB59DE7544DD0C543586A03D36A83BC9ECBE8BEDC3414D85137EB1D6B6744DAB5D24B1FD3D54605A40FA9805655425AC5332AAA8FCD6F7C4639920F711DD4FD9E06AA1499AD85843043CDFEEC4F366134AB0DCB019784D30508997325EED1C1E191F646F872DEEB3C210236E0D1EED9994DAA2CBA91BBDCE145A04968F27B92F87724F92E24ABEF9BD24CD272CB47A82FC35E3BDA6AF8D3CE9CCA073EEBD0CE07800B1EC06AECFE954D39762E7EBBCD67ED39D30423F4D83970FE7E8CB7A0009BE4E6B7A05D5F36BEA2C8FA4C9069BAAD22D591B91D76CA795BA0C7E6F19D38E79CE2794E5E58633576E1B877A2962D57EDA76193BF4406F93999DC1EF6EB4194F5EE8F12CF069DBE6B9FB9625FA9FEE828EAA6D14D926D334F6EA5C9F38A184FBF79848ECE736037D5DBC9A0DB09F42EC116BAB453F2360CBB75AD6A8CB9E853D1F04D6BD7DCE146B2D9A4955F38D7BE59E1DE9C62BF813F09996E5E19312C1B3F1EC5D420E8B216A17E4ACAC16F056435E6822FA23233681A9543B46AE51224C1FA929C24922E882FB1DB0721B25F6014CFDC67E13CABAA5319A712B70CE19CB57ED1A1F24BDFFAD98B415BE7D134CE7E2AF1185B4035A92A91A7FC5D4A5950E97DDE51305944A8C455D4A2CA9752D5A4CB7525E92AE2030515E6ABF2ED0D8431436162CA67E41E76D1EDA380F7B024FEBABCF9DB856C7644DBECA3534A9609094521A39E8F5F11C341B87AF33F56A33627432D0000 , N'6.1.3-40302')
Running Seed method.
The __MigrationHistory table literally keep track of all the migrations
When Update-Database is executed EF will take the model and create a HASH, which is save in the database. Next time you add-migration and do an update. It will compare the latest HASH in the database and the current HASH. Based on the differences it can determine what migration needs to be applied. There are logic to prvent silly action like delete columns that have data in them. If you delete database and execute Update-Database then it will reapply every migrations until the database is at the latest version.
EXEC DROP DATABASE NinjaDb
PM> Update-Database -Verbose Using StartUp project 'NinjaDomain.DataModel'. Using NuGet project 'NinjaDomain.DataModel'. Specify the '-Verbose' flag to view the SQL statements being applied to the target database. Target database is: 'NinjaDb' (DataSource: (LocalDb)\MSSQLLocalDB, Provider: System.Data.SqlClient, Origin: Configuration). Applying explicit migrations: [201610121329508_Initial, 201610121407468_AddBirthdayToNinja]. Applying explicit migration: 201610121329508_Initial. CREATE TABLE [dbo].[Clans] ( [Id] [int] NOT NULL IDENTITY, [ClanName] nvarchar, CONSTRAINT [PK_dbo.Clans] PRIMARY KEY ([Id]) ) CREATE TABLE [dbo].[Ninjas] ( [Id] [int] NOT NULL IDENTITY, [Name] nvarchar, [ServedInOniwaban] [bit] NOT NULL, [ClanId] [int] NOT NULL, CONSTRAINT [PK_dbo.Ninjas] PRIMARY KEY ([Id]) ) CREATE INDEX [IX_ClanId] ON [dbo].Ninjas CREATE TABLE [dbo].[NinjaEquipments] ( [Id] [int] NOT NULL IDENTITY, [Name] nvarchar, [Type] [int] NOT NULL, [Ninja_Id] [int] NOT NULL, CONSTRAINT [PK_dbo.NinjaEquipments] PRIMARY KEY ([Id]) ) CREATE INDEX [IX_Ninja_Id] ON [dbo].NinjaEquipments ALTER TABLE [dbo].[Ninjas] ADD CONSTRAINT [FK_dbo.Ninjas_dbo.Clans_ClanId] FOREIGN KEY ([ClanId]) REFERENCES [dbo].[Clans] ([Id]) ON DELETE CASCADE ALTER TABLE [dbo].[NinjaEquipments] ADD CONSTRAINT [FK_dbo.NinjaEquipments_dbo.Ninjas_Ninja_Id] FOREIGN KEY ([Ninja_Id]) REFERENCES [dbo].[Ninjas] ([Id]) ON DELETE CASCADE CREATE TABLE [dbo].[__MigrationHistory] ( [MigrationId] nvarchar NOT NULL, [ContextKey] nvarchar NOT NULL, [Model] varbinary NOT NULL, [ProductVersion] nvarchar NOT NULL, CONSTRAINT [PK_dbo.__MigrationHistory] PRIMARY KEY ([MigrationId], [ContextKey]) ) INSERT [dbo].[__MigrationHistory]([MigrationId], [ContextKey], [Model], [ProductVersion]) VALUES (N'201610121329508_Initial', N'NinjaDomain.DataModel.Migrations.Configuration', 0x1F8B0800000000000400ED5ACD6EE33610BE17E83B083AB54536CACFA50DEC5D649DA408BA8E177176DB5B404B63872D4569452A6BA3E893F5D047EA2B74A87F91A22D3B3F0D168B1C62539CE170E69BE1F093FFFDFB9FC19B65C89C7B48048DF8D03DDC3F701DE07E1450BE18BAA99CBFFAD17DF3FADB6F06E741B8743E96F38ED53C94E462E8DE49199F789EF0EF2024623FA47E1289682EF7FD28F44810794707073F7987871EA00A177539CEE03AE59286907DC1AFA388FB10CB94B071140013C5383E99665A9D2B128288890F43F78AF2DFC9591412CAF7CF88249984EB9C324AD09829B0B9EB10CE2349249A7AF241C05426115F4C631C20EC661503CE9B1326A0D8C2493DBDEF6E0E8ED46EBC5AB054E5A742A26DDB293C3C2EDCE3E9E23B39D9ADDC870E3C4747CB95DA75E6C4A13B6204D5EA0B9D8C58A226B5FD8B738500A1FEF33DA7E3C95E0509448EFADB734629936902430EA94C08DB73DEA73346FD5F607513FD017CC853C69A16A28DF8AC358043EF93288644AEAE615ED87D19B88ED796F374C14AAC2193EFEA92CBE323D7B9C2C5C98C4105808607A6324AE067E0901009C17B2225245CE980CC85C6EADA5ACA47EA53B922A20E73C875C664F90EF842DE0D5DFCE83A17740941395258F181534C391492490AC64257E49E2E321BB525B38008D7B906963D167734CE53603F7B749BC7FA2289C2EB889502D9E8ED0D491620D1D8C878348DD2C4D7CC18783590D6C22BD3B32DBEB2B1AF005B0FB0A70197B6C814927B082EF984D3CF64A6D0932FF8364294A8AFC6063767C56627F5057C8EE75DE05E62BA03EE6526F435E2FC534AE3106336F9CC21B09B53CDBB2D7242334C7BDE9D91FAA487E766A571A724ADA4BF66EB0BC856A5BE5A4401AF0A4FFE64E7442B10FB58D0EECC3E1BFEFB413B0D1BC0D6B67D292E1859D45DDE763857BA45DB938F0A760C7100095B21249A606C47660CE10C9232CC587C5DE72361297E3934A2D89AFB2B9058F58DC5ECA3F5B327A9FC0C24A9A61F9BEECF1DDD1C3C1522F269E6C9265CF2F2DB5EEC9C078EBD16D7B82D603446FFD1183D86211FBA3F18B677AAABEA66AD2E3F08DADA0E5DBDA84CF8193090E09CFA79AB3E22C227819926E885A03D82750812550808C3BB8BC060532ECDA245B94F63C2AC366B123D0B9DB2A8D2AD3F398318B8AA5156BFF759B43CB6CD852BFD9A8B367964E03560D3034D7A89590B046BBDD110D638FBB6849AF5B0DE80E1C7439DD581798544A74B747995D999356A10965D273D5E8B8B22288AA346DFBE523A05D90004DE34EA6ADCCA34C3776DE1F29E6248172EDB20DE885AB786C6044D55C3659A3945B3D89860B6927AE8D656B3CAEA7ABF46F6ACAD5F0D0585B77540B477D377A7C6616DD9F3DA8CEB9F738D6D58E3D23FBF367A758D57CAE6A14A8D9A56F2725EA9E49F3C0B0135189338C673BA41481523CE3467A346AFA6DB733461AEC3F345075553595BAD848D285980F61497464B2F6822A462C16644353AA32034A6B50A8125D1CAA59AB96E06AC4CBD72B6FADCC099CEC9ED77E550EDC10BDC940A78B63FD0C06F8A655C206124E9E8E947114B436E3F2EEDD23569D3D4518F9A9A069E66BF71421A8E32CA7ADBEBBD625280FFE141E9CCED1E51B1C83D4D58CC90D8C261D360F2184D6DE6D3ED20A3EFCED62EFD6F70A92BEF2321C6AAB02F74D62878A918CA2F934D0DF9C8F347B97DC4755406E38CDF2EA8A5D47691536778176F6039CB4DAFF58A7AAEA3FB32D2306047DBAC77A29D1169B74A6F55CC501B1D8B3EA5025AD5B9681DCAA0E81636BF4733DA877C8AEBA0EDF73450ADC374252484196AF6A79FD888D1AC972B278C09A7731032E736DCA383C323ED3DDCCB7927E60911B01E2FC69E9D89A4CAA31BB9C61D58F72601C9EF49E2DF91E4BB902CBF6F6A3349C62D5FF47C19FEDAD157FD5F9FCCA87CE0AB13DA49D85FF2009643F7CF4CE4C4B9FCED3697DA73260966E88973E0FCB561E15DDF1E7C8DBC958ACF2CDDD690EA98DB2EDEA5DC23447C275E37A7519E937BD598835D78E49DE85BCB75F66918DB2F91A57D4EB6740DC3F4205A7877E2FFD9A0B3EEAA66AEB8AEBD7E74147553D52691B5998BB652D179173B7483598481CE6B60379DDAC952DB49EA2EC5164AB253F3362CB675AD6A8EB9E85351DD4D6FD7FCDC4642D7A46E5F389FBDD9E0B535C57E6B7E12C2DABCE6615A367E5489A541D045AD42FDC49283DF4AC86ACE259F476565D02C2AA768DDCA182409305B4F1349E7C497F8D80721B25F3914AF92CFC359D609A7324E256E19C2196BFD6A42D59775EB67AC7CDBE6C124CE7E8EF0185B4033296E0126FC6D4A5950D97DD1D1305954A8C255F4A22A9652F5A48B55A5E92AE23D1515EEABEAED0D8431436562C2A7E41E76B1ED838077B020FEAABCADDB956C0E44DBED83334A16090945A1A396C7AF88E1205CBEFE0FAF5122025B2C0000 , N'6.1.3-40302')
Applying explicit migration: 201610121407468_AddBirthdayToNinja. ALTER TABLE [dbo].[Ninjas] ADD [DateOfBirth] [datetime] NOT NULL DEFAULT '1900-01-01T00:00:00.000' INSERT [dbo].[__MigrationHistory]([MigrationId], [ContextKey], [Model], [ProductVersion]) VALUES (N'201610121407468_AddBirthdayToNinja', N'NinjaDomain.DataModel.Migrations.Configuration', 0x1F8B0800000000000400ED5ACD6EE33610BE17E83B083AB545364AB29736B07791759222E8265EC4D96D6F012D8D1DB614A58A54D646D127EBA18FD457E850FF224559767E102C1639C4E6CF7038F3CD70F8D1FFFDF3EFE8ED2A64CE3D2482467CEC1EEE1FB80E703F0A285F8EDD542E5EFDE8BE7DF3ED37A3B3205C399FCA71AFD5389CC9C5D8BD93323EF63CE1DF4148C47E48FD2412D142EEFB51E89120F28E0E0E7EF20E0F3D40112ECA729CD175CA250D21FB825F2711F7219629619751004C14EDD833CBA43A57240411131FC6EE15E5BF93D3282494EF9F1249B219AE73C228416566C016AE43388F2491A8EAF147013399447C398BB181B09B750C386E419880620BC7F5F0A1BB393852BBF1EA89A5283F151275DB4EE0E1EBC23C9E3E7D2723BB95F9D080676868B956BBCE8C3876278CA0587DA1E3094BD4A0B67D71AC1020D47FBEE774F4EC559040E4A8BF3D679232992630E690CA84B03DE7433A67D4FF05D637D11FC0C73C65ACA921EA887DAD066CFA90443124727D0D8B42EF8BC075BCF63C4F9F584D6BCCC97775C1E5EB23D7B9C2C5C99C410580860566324AE067E0901009C1072225245CC980CC84C6EADA5ACA46EA53B922A20E63C8752EC9EA3DF0A5BC1BBBF8D175CEE90A82B2A5D0E223A7187238492629180B5D917BBACC74D496CC1C225CE71A58D62DEE689C87C07ED6759BFBFA3C89C2EB889513B2D6DB1B922C41A2B291D1358BD2C4D7D4187935907AE195C9D9165F59DB5780F503EC69C0A52D3283E41E820B3EE5F433992BF4E40BBE8B1025EAABB1C1CD51B1D948FD3230CBC374F18E26F2AE14A49A6EA8B2C72659D6E0C9636397D029E3A32374CAA81AAAC4D99F298D43F4FFF43387C0AE4E35EEB6882F4D31ADBF3BBAF5410F8FF34AE24E015FCDFE1AF92F20F295F86A1105BCCA3D79CFCE815620F6B1A0DD197D36FC0F83761A3680AD6DFB429C33B2AC2BC6ED70AE648BB6251F15ECE8E20012B6464834C1D8F6CC258473484A376322779D4F84A5F8E5D0F0626BECAF4062558316A38FFA474F53F91948520D7F6D9A3F3774B3F14488C8A799259B70C9D36F7BB1331E38F65C5CE3B680D125DA8FC6683174F9D8FDC1D0BD535C95376B71F941D09676E8EA4965CA4F818104E7C4CFCBFE09113E09CC30412B04ED16CC4390A8444018DE83043A9B7269262DCA7D1A1366D5599B3130D1298D2AD97ACF29C4C0558EB2DA7DC8A26509602E5CC9D74CB4C92223AF019B0168D2534C2F10ACF9464358E3ECDB126AD6C37A03861F0F755603E619128D2ED1E4556467DAA84658759DF478C52E92A0288E1A7DFB4AE80C640310786BA9B3712BD20CDBB52797771E637661B20DD31B5EEB96D018A0896A984C53A728161B03CC5252775D6F36ABB4AEF76B444F6FFE6A0828ACAD03A2BD9BA13B350E6BCB9E7B236E78CC35B661F5CBF0F8DA68D51EAB94C543151A3545E5E51C55C9657916326B7449E218CFE906B955B438B39CD99ABC9A6DCFF784B90CCF171DB44FA56DB51216A264095A2F2E8D9A9ED34448C5A8CD892A742641680C6B25024BA0954B3563DD7458197AE568F5B981339DDFDBEF8AA1DA82E7B829E5F06C7FA081DF9C96F18A8491A4A3A69F442C0DB9FDB8B4CFAE09A0A68CBAD59434F234FD8D13D2309491D6DB561FE49302FC0F774A676C0FF08A65DED3B8C57489CD1D36092627D29466F66E07197D77B672C92EA5C58F3445B53A5E0CFCEA4CFE4808B40A1C0AC51E012F1593F9E5B429216F797E2FB78FCC8E4C63D40CDB39B59CB59DE7544DD0C543586A03D36A83BC9ECBE8BEDC3414D85137EB1D6B6744DAB5D24B1FD3D54605A40FA9805655425AC5332AAA8FCD6F7C4639920F711DD4FD9E06AA1499AD85843043CDFEEC4F366134AB0DCB019784D30508997325EED1C1E191F646F872DEEB3C210236E0D1EED9994DAA2CBA91BBDCE145A04968F27B92F87724F92E24ABEF9BD24CD272CB47A82FC35E3BDA6AF8D3CE9CCA073EEBD0CE07800B1EC06AECFE954D39762E7EBBCD67ED39D30423F4D83970FE7E8CB7A0009BE4E6B7A05D5F36BEA2C8FA4C9069BAAD22D591B91D76CA795BA0C7E6F19D38E79CE2794E5E58633576E1B877A2962D57EDA76193BF4406F93999DC1EF6EB4194F5EE8F12CF069DBE6B9FB9625FA9FEE828EAA6D14D926D334F6EA5C9F38A184FBF79848ECE736037D5DBC9A0DB09F42EC116BAB453F2360CBB75AD6A8CB9E853D1F04D6BD7DCE146B2D9A4955F38D7BE59E1DE9C62BF813F09996E5E19312C1B3F1EC5D420E8B216A17E4ACAC16F056435E6822FA23233681A9543B46AE51224C1FA929C24922E882FB1DB0721B25F6014CFDC67E13CABAA5319A712B70CE19CB57ED1A1F24BDFFAD98B415BE7D134CE7E2AF1185B4035A92A91A7FC5D4A5950E97DDE51305944A8C455D4A2CA9752D5A4CB7525E92AE2030515E6ABF2ED0D8431436162CA67E41E76D1EDA380F7B024FEBABCF9DB856C7644DBECA3534A9609094521A39E8F5F11C341B87AF33F56A33627432D0000 , N'6.1.3-40302')
Running Seed method.
ADO.NET Entity Data Model (EDMX)
The *.edmx file is broken down into 4 sections that can be view via xml
- It is a snapshot of the database schema when the designer but only for the selected objects.
- It is a representation of the model itself, with entities and each entity having properties.
- This tells the EF how to get from entities and thier properties to the database tables and their columns, as well as how to deal with the related data.
- Information about how things are layout in the designer surface
At run time, Entity Framework reads all of this XML. And as you do queries and updates in your application, it reads that in memory model to figure out how to turn a query into SQL, how to take the results of queries and materialise them as objects. On Update it also uses this XML to figure out how to express the command trees that will be used by the provider to create the relevant commands.