扩展数据库初始化程序

时间:2014-02-18 09:05:01

标签: entity-framework ef-code-first migration

实体框架有三个我知道的初始值设定项 - CreateDatabaseIfNotExistsDropCreateDatabaseWhenModelChangesDropCreateDatabaseAlways。当模型发生变化时,它们会丢弃所有数据,或者死亡。

我想要一个初始化程序,它可以扩展现有数据库以匹配模型。如果缺少一个表,则创建它,如果某些列发生了更改,重命名它们并制作新副本等等。当然,还有很多需要考虑的问题,特别是在涉及引用时,但我确信比一些更合理丢弃数据可以完成。

这样的初始化程序是否存在?如果没有,我怎么能写一个?

为了澄清,我想阅读EF检测到的更改,例如,如果列从int更改为double,我想在保留数据的同时进行更改。不需要考虑参考列之间的复杂交互。

2 个答案:

答案 0 :(得分:3)

您可以找到几个类似于您想要做的in this thread

的数据库初始化程序

很好的信息来源当然是the sources of EF

测试项目中有很多自定义数据库初始值设定项。另外还有一个好处:文件$\test\EntityFramework\FunctionalTests.Transitional\Migrations\TestHelpers\InfoContext.cs中的SQL元数据的DbContext:您可以使用linq查询sql元数据。

答案 1 :(得分:2)

没有可用于数据库的功能,但我会查看Database Migration。我觉得这不是特别容易,但这绝对是你要找的。做一些研究,很明显应该很明显:)

http://msdn.microsoft.com/en-gb/data/jj554735.aspx

http://msdn.microsoft.com/en-gb/data/jj591621.aspx