更新到EF 6.1后,迁移不适用于Timestamp

时间:2014-05-28 19:35:08

标签: entity-framework migration

我刚刚将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'。

我在谷歌度过了两个晚上,但在任何地方都没有发现这个问题......有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,在这个主题上度过了另一个晚上。最后,我找到了解决方案 - 通过这些更改,EF 6.1不会创建迁移!

那么,诀窍是什么?只有当您使用TPT(层次结构中每种类型的表)时才会发生这一切。

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

希望它有所帮助...