首页 > 解决方案 > EF CORE 无时间戳的乐观并发

问题描述

我正在处理一堆实体,每个实体都有几个属性。每个属性都涉及对保存的乐观并发检查。我更喜欢避免使用时间戳,因为我应该在每个表上添加字段,我正在使用旧数据库并且我不想对其进行任何更改。采用的方案依赖于在modelBuilder中调用IsConcurrencyToken

 protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                modelBuilder.Entity<MyEntity1>(entity =>
                {
                    entity.Property(e => e.Property1).IsConcurrencyToken;
                    entity.Property(e => e.Property2).IsConcurrencyToken;
                    entity.Property(e => e.Property3).IsConcurrencyToken;


                    entity.Property(e => e.PropertyN).IsConcurrencyToken;
                });         
             }

但我真的需要显式调用IsConcurrencyToken每个属性吗?是否有机会将我的实体配置为在并发检查中自动包含每个属性?

标签: c#.netentity-frameworkef-core-2.1

解决方案


是否有机会将我的实体配置为在并发检查中自动包含每个属性?

是的。您可以在 OnModelCreating 中遍历所有实体和属性:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    foreach (var entity in modelBuilder.Model.GetEntityTypes())
    {
        foreach (var prop in entity.GetProperties())
        {
            prop.IsConcurrencyToken = true;
        }
    }

    base.OnModelCreating(modelBuilder);
}

推荐阅读