我试图掌握 Code First,到目前为止,每次我对模型进行更改时,我都需要删除并重新创建数据库。数据库中当前的数据呢?我只是觉得我每次都必须这样做很烦人,并且除非您 100% 确定您永远不必进行更改,例如在表格中添加新列,否则这并不能成为一种好的 Web 方法。还有其他方法可以防止这种情况发生吗?
问问题
1840 次
2 回答
1
默认情况下,数据库初始值设定项设置为 DropCreateDatabaseIfModelChnages。您可以将数据库初始化程序设置为 null 以避免重新创建,
Database.SetInitializer<YourContext>(null);
另一种选择是使用数据库迁移来更新数据库而不重新创建它。
于 2012-06-05T15:35:15.807 回答
1
如果您在开发期间尝试维护测试数据,请考虑使用 IDatabaseInitializer 的 Seed 方法(即您的数据库初始化程序)。Seed 方法在初始化期间调用(在应用任何模型更改之后)并将填充您指定的任何测试数据。
指定希望 EF 使用的初始化程序的最佳方法是在 global.asax.cs 文件中。
这是一个例子:
[全球.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);
}
}
于 2012-06-13T17:36:10.953 回答