Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework EF迁移:在自动迁移中重命名列?_Entity Framework_Ef Code First_Code First_Entity Framework 5_Entity Framework Migrations - Fatal编程技术网

Entity framework EF迁移:在自动迁移中重命名列?

Entity framework EF迁移:在自动迁移中重命名列?,entity-framework,ef-code-first,code-first,entity-framework-5,entity-framework-migrations,Entity Framework,Ef Code First,Code First,Entity Framework 5,Entity Framework Migrations,如果重命名属性,VisualStudioIDE足够智能,可以帮助您在整个代码中进行重构以重命名该属性。如果该重命名在EF迁移中使用的模型上,并且您运行标准的自动迁移,如: update-database -f 您将得到以下结果: AddColumn("NewName"... DropColumn("OldName"... 不是你想要的。显然,此时运行addmigration将允许您手动将这两个调用更改为对RenameColumn的单个调用,但是是否有某种方法可以让自动迁移自动执行此操作?也许

如果重命名属性,VisualStudioIDE足够智能,可以帮助您在整个代码中进行重构以重命名该属性。如果该重命名在EF迁移中使用的模型上,并且您运行标准的自动迁移,如:

update-database -f
您将得到以下结果:

AddColumn("NewName"...
DropColumn("OldName"...
不是你想要的。显然,此时运行addmigration将允许您手动将这两个调用更改为对RenameColumn的单个调用,但是是否有某种方法可以让自动迁移自动执行此操作?也许是我做得不对的一些财产重命名方法


我在VS2012中使用了EF 5.0,但这种行为也出现在EF 4.3.1和VS2010中。

我的观点:EF不知道您已经重命名了现有列。重构是设计时更改,没有任何关于更改的持久化信息,因此在运行迁移时,EF根本不知道如何区分重命名和实际删除/添加新列。

迁移无法自动检测属性和列的重命名。支架式迁移将包含一个Drop/Create,您需要将其更改为重命名

如果您只是重命名列(通过向属性添加[column]注释),我们可以将其检测为重命名,因为我们可以匹配列映射到的属性的名称

我们确实考虑添加一个重命名开关来添加迁移命令,但是最后我们决定编辑生成的代码比在命令行中提供重命名的语法更容易。


~Rowan

不过,将此信息从IDE保存到迁移中会非常有用,因为迁移已经在许多其他方面利用了IDE。在最新的EF中(截至2014年12月8日),它检测到了重命名。不确定这一机制-罗文,你能给点建议吗?(代码优先,没有注释,没有流畅-只是重命名了某些类的属性)