我正试图抓住Code First,到目前为止,每次我对模型进行更改时,我都需要删除并重新创建数据库。当前数据库中的数据怎么样?我觉得很烦人,我每次都必须这样做,并没有做出一个好的网络方法,除非你100%确定你永远不必进行更改,如在表格中添加新列。还有另一种方法可以防止这种情况发生吗?
答案 0 :(得分:1)
默认情况下,数据库初始化程序设置为DropCreateDatabaseIfModelChnages。您可以将数据库初始化程序设置为null以避免重新创建,
Database.SetInitializer<YourContext>(null);
另一个选项是使用Database Migrations更新数据库而不重新创建它。
答案 1 :(得分:1)
如果您在开发期间尝试维护测试数据,请考虑使用IDatabaseInitializer的Seed方法(即您的数据库初始化程序)。在itialization期间(在应用任何模型更改之后)调用Seed方法,并填充您指定的任何测试数据。
指定要使用EF的初始化程序的最佳方法是在global.asax.cs文件中。
以下是一个例子:
<强> [Global.asax.cs中] 强>
Database.SetInitializer<MyApplicationDbContext>(new MyApplicationDbContextInitializer());
<强> [MyApplicationDbContextInitializer.cs] 强>
public class MyApplicationDbContextInitializer : DropCreateDatabaseAlways<MyApplicationDbContext>
{
protected override void Seed(TitleDB context)
{
context.Products.Add(new Product { Id = 1, Name = "Foobar XL" });
context.Products.Add(new Product { Id = 2, Name = "Foobar LG" });
context.Products.Add(new Product { Id = 3, Name = "Foobar MD" });
context.SaveChanges();
base.Seed(context);
}
}