EF代码首先在模型需要更改时,是否有必要丢弃数据库?

时间:2012-06-05 15:22:08

标签: entity-framework ef-code-first

我正试图抓住Code First,到目前为止,每次我对模型进行更改时,我都需要删除并重新创建数据库。当前数据库中的数据怎么样?我觉得很烦人,我每次都必须这样做,并没有做出一个好的网络方法,除非你100%确定你永远不必进行更改,如在表格中添加新列。还有另一种方法可以防止这种情况发生吗?

2 个答案:

答案 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);
    }
}