如何在Entity框架中处理数据库更改

时间:2011-03-21 15:11:59

标签: .net sql entity-framework linq-to-entities

我使用codefirst,然后发布我的应用程序版本1.0。

现在我改变了一堆表格,我想用2.0升级我的应用程序的1.0分贝。

这种情况通常如何在实体框架中处理?

2 个答案:

答案 0 :(得分:1)

EF没有任何内置用于生成差异脚本[尚未]。 EF可以删除并重新创建数据库,但这在现实世界中并不真正可用......他们似乎有数据库迁移的计划,但我不知道何时/是否可用({{3} })。

如果要进行增量更改(添加/删除表,列,约束,索引等),则必须编写SQL脚本,以应用从版本1数据库到版本2数据库所需的更改。在数据库中的某处存储db“版本号”是一个好主意,以便在“野外”运行许多不同版本时更容易应用正确的脚本。

或者,有第三方工具可以基于EDMX / db差异生成增量差异脚本(“alter table ...”等),例如:我对EF4的'Model Comparer':http://blogs.msdn.com/b/efdesign/archive/2010/10/22/code-first-database-evolution-aka-migrations.aspx

答案 1 :(得分:0)

我们使用的另一种选择是保留两个实体框架模型,一个用旧,一个用新。借助反射,您可以创建最适合的迁移算法。

旧EF模型可以序列化为XML或任何此类格式。然后,您可以删除并重新创建数据库并从XML反序列化您的EF模型并将它们放回新数据库中。但是,插入标识似乎没什么问题,但可以进行管理。

但是这个解决方案仅适用于大型数据库的小型数据库,您需要更高级的解决方案。