Entity framework 更新到EF 6.1后,迁移不使用时间戳
我刚刚将我的ASP.NET MVC项目升级到Entity Framework 6.1 我觉得很奇怪:我还必须添加一个迁移,它基本上删除一些主键和外键,更改一些列,然后重新创建键。所有模型都有一个层次关系,即我有一个类“Person”并继承“Teacher”、“Student”等。然后我将其映射到每个类型层次结构的表中 我的个人模型中受影响的属性为:Entity framework 更新到EF 6.1后,迁移不使用时间戳,entity-framework,migration,Entity Framework,Migration,我刚刚将我的ASP.NET MVC项目升级到Entity Framework 6.1 我觉得很奇怪:我还必须添加一个迁移,它基本上删除一些主键和外键,更改一些列,然后重新创建键。所有模型都有一个层次关系,即我有一个类“Person”并继承“Teacher”、“Student”等。然后我将其映射到每个类型层次结构的表中 我的个人模型中受影响的属性为: public Byte[] Timestamp { get; set; } 此属性定义为rowversion: Property(p =>
public Byte[] Timestamp { get; set; }
此属性定义为rowversion:
Property(p => p.Timestamp).IsRowVersion();
向上迁移的代码:
AlterColumn("dbo.Teachers", "timestamp", c => c.Binary());
AlterColumn("dbo.Teachers", "PersonId", c => c.Int(nullable: false));
其他受影响的财产(也包括人员类别):
在实体配置中定义为:
Property(p => p.PersonId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
这是主键。创建的迁移:
AlterColumn("dbo.Teachers", "timestamp", c => c.Binary());
AlterColumn("dbo.Teachers", "PersonId", c => c.Int(nullable: false));
两点意见:
1) 我为每个继承的实体定义“IsRowVersion”配置
2) 我还为每个继承的实体定义了主键配置
执行迁移时出现的错误:
无法更改列“timestamp”,因为它是“timestamp”
我在谷歌呆了两个晚上,但在任何地方都没有发现这个问题。。。有什么想法吗
谢谢 好的,我们又花了一个晚上讨论这个话题。最后,我找到了解决方案——通过这些更改,EF 6.1不会创建迁移 那么,诀窍是什么?只有在使用TPT(层次结构中每种类型的表)时,才会发生这一切 我的错误:我分别对每种类型的主键和行版本进行了配置(见上面的问题)!现在,我将这些配置移动到基本类型配置(我以前根本没有),并将它们从子类型中删除。然后它就起作用了 希望它能帮助别人