在本节中,您将使用Entity Framework Code First来实现模型类上的操作。从而使得这些操作和变更,可以应用到数据库中。
默认情况下,就像您在之前的教程中所作的那样,使用 Entity Framework Code First自动创建一个数据库,Code First为数据库所添加的表,将帮助您跟踪数据库是否和从它生成的模型类是同步的。如果他们不是同步的,Entity Framework将抛出一个错误。这非常方便的在开发时就可以发现错误,否则您可能会在运行时才发现这个问题。 (由一个晦涩的错误信息,才发现这个问题。)
为对象模型的变更设置 Code First Migrations
如果您使用的是 Visual Studio 2012,从解决方案资源管理器中双击Movies.mdf,打开数据库工具。Visual Studio Express for Web将显示数据库资源管理器,Visual Studio 2012 将显示服务器资源管理器。如果您使用的是Visual Studio 2010,请使用 SQL Server对象资源管理器。
在数据库工具 (数据库资源管理器、 服务器资源管理器或 SQL Server对象资源管理器),右键单击MovieDBContext ,并选择删除以删除电影数据库。
返回到解决方案资源管理器。在Movies.mdf文件上右键单击,并选择删除以删除电影数据库。
Build应用程序,以确保没有任何编译错误。
从工具菜单上,单击库包管理器,然后点击程序包管理器控制台.
在 软件包管理器控制台 窗口中 PM> 提示符下输入"Enable-Migrations –ContextTypeName MvcMovie.Models.MovieDBContext"。
(如上所示)Enable-Migrations命令会在Migrations文件夹中创建一个Configuration.cs文件。
在Visual Studio 中打开Configuration.cs文件。把Configuration.cs文件中的Seed方法,替换为下面的代码:
protected override void Seed(MvcMovie.Models.MovieDBContext context) {
context.Movies.AddOrUpdate(
i => i.Title,
new Movie { Title = "When Harry Met Sally", ReleaseDate = DateTime.Parse("1989-1-11"), Genre = "Romantic Comedy", Price = 7.99M },
new Movie { Title = "Ghostbusters ", ReleaseDate = DateTime.Parse("1984-3-13"), Genre = "Comedy", Price = 8.99M },
new Movie { Title = "Ghostbusters 2", ReleaseDate = DateTime.Parse("1986-2-23"), Genre = "Comedy", Price = 9.99M },
new Movie { Title = "Rio Bravo", ReleaseDate = DateTime.Parse("1959-4-15"), Genre = "Western", Price = 3.99M }
);
}
在Movie下面出现的红色波浪线上右键单击,并选择Resolve然后点击using MvcMovie.Models;
这样做之后,将添加以下的 using语句:
每次Code First Migrations 会调用Seed 方法(即,在程序包管理器控制台中调用update-database),并且此次调用会更新行:更新已经插入的行,或把不存在的行也插入。
按 CTRL-SHIFT-B 来Build工程。(如果此次Build不成功,以下的步骤将会失败。)
下一步是创建一个DbMigration类,用于初始化数据库迁移。此迁移类将创建新的数据库,这也就是为什么在之前的步骤中你要删除movie.mdf文件。
在软件包管理器控制台窗口中,输入"add-migration Initial"命令来创建初始迁移。" Initial" 的名称是任意,是用于创建迁移文件的名称。
Code First Migrations将会在Migrations文件夹中创建另一个类文件 (文件名为: {DateStamp}_Initial.cs ),此类中包含的代码将创建数据库的Schema。迁移文件名使用时间戳作为前缀,以帮助用来排序和查找。查看{DateStamp}_Initial.cs<.&7Rz/7jM"ojV6"Zjz/ I5b?jZB7>VFZr'*_"Cr'?jB7_4(3"CB;YM&O&5%jkrUZW>r/""oZ"_j4(4)I554)U4((
5IM(4(5I4(Z皆#B;r/2Bf:">_>хF4(vjnb/2Bf:">_>jI5j&7^"r'&B34(騹}顽4(7ZR/B; 5jUI3
>r/"Zj_4(騹}顽щ4(6W9Nv*ZRΣ?
>R4(騹}顽4(6WZjR32.brR_4(騹}顽4([
*)I_*"GJ0M%jnv4(
>7r/2Bf:">_>хF'j>c2[V6J3z/:rb27j4(rr*r/"R皢z//J3V6jB3
惒/V6v"oZV6j>>77W:v"Gr/r/3j3G*"z/皢z/&3j*"g3 |