实体框架有三个我知道的初始值设定项 - CreateDatabaseIfNotExists
,DropCreateDatabaseWhenModelChanges
和DropCreateDatabaseAlways
。当模型发生变化时,它们会丢弃所有数据,或者死亡。
我想要一个初始化程序,它可以扩展现有数据库以匹配模型。如果缺少一个表,则创建它,如果某些列发生了更改,重命名它们并制作新副本等等。当然,还有很多需要考虑的问题,特别是在涉及引用时,但我确信比一些更合理丢弃数据可以完成。
这样的初始化程序是否存在?如果没有,我怎么能写一个?
为了澄清,我想阅读EF检测到的更改,例如,如果列从int
更改为double
,我想在保留数据的同时进行更改。不需要考虑参考列之间的复杂交互。
答案 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。我觉得这不是特别容易,但这绝对是你要找的。做一些研究,很明显应该很明显:)