Entity framework 扩展数据库初始值设定项

Entity framework 扩展数据库初始值设定项,entity-framework,ef-code-first,migration,Entity Framework,Ef Code First,Migration,实体框架有三个我知道的初始值设定项-CreateDatabaseIfNotExists,DropCreateDatabaseWhenModelChanges和DropCreateDatabaseAlways。当模型更改时,它们要么删除所有数据,要么死亡 我想要一个初始值设定项,它将扩展现有数据库以匹配模型。如果缺少一个表,请创建它,如果某些列发生了更改,请重命名它们并创建新的副本,等等。当然,需要考虑的事情很多,特别是在引用方面,但我相信可以做一些比删除数据更明智的事 是否存在这样的初始值设定项

实体框架有三个我知道的初始值设定项-
CreateDatabaseIfNotExists
DropCreateDatabaseWhenModelChanges
DropCreateDatabaseAlways
。当模型更改时,它们要么删除所有数据,要么死亡

我想要一个初始值设定项,它将扩展现有数据库以匹配模型。如果缺少一个表,请创建它,如果某些列发生了更改,请重命名它们并创建新的副本,等等。当然,需要考虑的事情很多,特别是在引用方面,但我相信可以做一些比删除数据更明智的事

是否存在这样的初始值设定项?如果没有,我怎么写呢


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

数据库中没有类似的功能,不过我会研究一下。我不觉得这特别容易,但这绝对是你想要的。对此进行一些研究,应该很快就会发现:)

,


您可以找到两个数据库初始值设定项,它们与您想要执行的操作类似

信息的重要来源当然是:


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

自动化过程无法判断列是新的还是重命名的。这总是需要一些人工干预(即Up方法中的硬编码重命名)。@GertArnold,对于简单列,添加和重命名也可以同样处理。我同意有很多事情是无法决定的,但是如果列
Foo varchar(50)
更改为
Foo verchar(60)
存在一个合理的自动迁移,我需要它。