Database.SetInitializer中的DropCreateDatabaseIfModelChanges

时间:2011-09-05 06:53:20

标签: c# entity-framework-4.1 ef-code-first

我在实体框架V4.1中使用代码优先模式。我遇到的其中一件看起来非常奇怪的事情是,无论何时在模型中进行任何更改,数据库都会被删除并创建新的数据库。这非常不整洁,因为每次删除和重新创建数据库都不是理想的解决方案。我的所有测试数据和一切都丢失了。我知道有一个名为Seed的方法,您可以将测试数据记录插入其中。但是,可能只有几百个测试记录,并且将每个记录放在种子方法中是不可行的。还有其他替代方案吗?我根本不会使用代码优先,但必须在项目中使用它。

2 个答案:

答案 0 :(得分:2)

您可以将EF设置为仅尝试修改数据库(如果数据库尚不存在)。

Database.SetInitializer<YourDataContext>(new CreateDatabaseIfNotExists<YourDataContext>());

答案 1 :(得分:2)

目前没有其他方法,EF本身可能永远不会支持任何更多,然后删除/重新创建。 ADO.NET团队选择的方式是使用单独的数据库升级工具Migrations。迁移目前仅作为CTP提供=它们不适合实际使用,但用于测试和收集反馈给EF团队。

作为一种解决方法,您可以拥有外部数据填充脚本并从种子调用它 - 这将更容易进行维护。