2011-09-05 30 views
1

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

回答

2

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

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

+0

https://blogs.msdn.microsoft.com/b/adonet/archive/2011/07/27/code-first-migrations-august-2011-ctp-released.aspx找不到 – Kiquenet

2

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

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

这不是我正在寻找的答案。数据库创建后,我对模型所做的更改如何?如果我使用你的方法,这些改变将不会被反映出来。 – Jaggu

相关问题