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