Entity framework 更新到EF 6.1后,迁移不使用时间戳

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 =>

我刚刚将我的ASP.NET MVC项目升级到Entity Framework 6.1

我觉得很奇怪:我还必须添加一个迁移,它基本上删除一些主键和外键,更改一些列,然后重新创建键。所有模型都有一个层次关系,即我有一个类“Person”并继承“Teacher”、“Student”等。然后我将其映射到每个类型层次结构的表中

我的个人模型中受影响的属性为:

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(层次结构中每种类型的表)时,才会发生这一切

我的错误:我分别对每种类型的主键和行版本进行了配置(见上面的问题)!现在,我将这些配置移动到基本类型配置(我以前根本没有),并将它们从子类型中删除。然后它就起作用了

希望它能帮助别人