这看起来非常简单和愚蠢,但由于某些原因它无法工作......我在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)
答案 0 :(得分:1)
使用流畅的API添加.IsRowVersion()使其正常工作。
Microsoft的教程是错误的还是没有EF6版本的重大变化? (我相信6.1.1我相信)如果有人能回答这个问题,我很乐意将接受的答案改为更详细的答案。
答案 1 :(得分:1)
IsConcurrencyToken 不适用于byte []
数据类型为nvarchar(max) 如果不初始化,则其值始终为null 更新记录时,其值不会自动递增。
另一方面,IsRowVersion 具有数据类型rowversion, 所以 它的值永远不会为空,并且 更新记录时,其值始终自动递增。 它会自动将属性配置为乐观并发令牌。