【发布时间】:2011-12-26 17:51:03
【问题描述】:
我正在研究实体框架中的模型优先方法。我发现每当从模型中重新生成数据库时,所有数据都会被清除。模型优先真的是一种有用的方法还是有办法解决这个问题
【问题讨论】:
标签: asp.net .net entity-framework-4 ef-model-first
我正在研究实体框架中的模型优先方法。我发现每当从模型中重新生成数据库时,所有数据都会被清除。模型优先真的是一种有用的方法还是有办法解决这个问题
【问题讨论】:
标签: asp.net .net entity-framework-4 ef-model-first
解决此问题的一种方法是为您的数据播种,即在 EF 创建数据库后使用一些测试数据填充数据库。见http://binuity.com/blog/2011/03/28/ef4-seeding-data-on-each-dropcreatedatabaseifmodelchanges/
另一种方法是让tools 尝试更新数据库而不是重新创建它。
【讨论】:
Entity Framework 删除您的数据库并从头开始重新创建它。这就是它的工作方式。 Microsoft 正在制定允许您迁移更改的迁移策略,但要到下一个主要版本才能准备好。
有一些第三方工具试图解决这个问题,但我不会太依赖它们。
【讨论】:
Model first 不会自动删除您的数据。它会创建用于创建数据库的 SQL 脚本,如果您执行它,它可能会删除所有表,但您可以手动更改脚本,也可以使用一些高级工具进行数据库升级:
【讨论】:
每当您更新模型并运行自动生成的 SQL 脚本时,您都可以手动为数据库播种以取回您的数据。播种在 Model-First 中的工作方式与在 Code-First 中的工作方式不同,因此经常谈论且有用的 DropAndCreateDatabaseIfModelChanges 方法效果不佳。最简单的解决方法是通过初始化自己手动播种。
var db = new MyDbContext();
db.Database.Initialize(true);
【讨论】: