流畅的API中的IsConcurrencyToken不会影响迁移脚手架

时间:2014-10-03 14:10:43

标签: c# entity-framework

这看起来非常简单和愚蠢,但由于某些原因它无法工作......我在DbContext的{​​{1}}方法中得到了这一行:

OnModelCreating

我在客户实体中得到了这一行:

modelBuilder.Entity<Client>().Property(o => o.RowVersion).IsConcurrencyToken();

脚手架迁移最终会像这样:

public byte[] RowVersion { get; set; }

如果我将属性AddColumn("dbo.Client", "RowVersion", c => c.Binary()); 添加到属性中,那么它可以工作并给我:

[Timestamp]

我有什么东西在这里失踪吗?我真的很困惑......在tutorial中没有其他事可做了。

- 编辑 -

使用流畅的API添加AlterColumn("dbo.Client", "RowVersion", c => c.Binary(nullable: false, fixedLength: true, timestamp: true, storeType: "rowversion")); 使其正常工作。微软的教程是错误的,还是没有EF6版本的重大改变? (我相信6.1.1)

2 个答案:

答案 0 :(得分:1)

使用流畅的API添加.IsRowVersion()使其正常工作。

Microsoft的教程是错误的还是没有EF6版本的重大变化? (我相信6.1.1我相信)如果有人能回答这个问题,我很乐意将接受的答案改为更详细的答案。

答案 1 :(得分:1)

IsConcurrencyToken 不适用于byte []

数据类型为nvarchar(max) 如果不初始化,则其值始终为null 更新记录时,其值不会自动递增。

另一方面,

IsRowVersion 具有数据类型rowversion, 所以 它的值永远不会为空,并且 更新记录时,其值始终自动递增。 它会自动将属性配置为乐观并发令牌。