EF CORE Оптимистичный параллелизм без отметки времени - PullRequest
0 голосов
/ 20 сентября 2018

Я работаю с множеством сущностей, каждая из которых имеет несколько свойств.Каждое свойство участвует в оптимистической проверке параллелизма при сохранении.Я предпочитаю избегать использования метки времени, так как я должен добавить поле в каждую таблицу, я работаю с устаревшей базой данных, и я не хочу вносить в нее какие-либо изменения.Принятое решение основано на вызове IsConcurrencyToken в modelBuilder

 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 для каждого свойства?Есть ли возможность настроить мои объекты для автоматического включения всех свойств в проверку параллелизма?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Спасибо Дэвиду Брауну за предложение.

Поскольку я хочу иметь возможность включить параллелизм сущности по сущности, я обернул код в метод расширения

  public static EntityTypeBuilder<TEntity> EnableConcurrency<TEntity>(this EntityTypeBuilder<TEntity> entityTypeBuilder) where TEntity : class
        {
            var entity = entityTypeBuilder.Metadata.Model.FindEntityType(typeof(TEntity));
            foreach (var prop in entity.GetProperties())
            {
                prop.IsConcurrencyToken = true;
            }
            return entityTypeBuilder;
        }

и собираюсь использоватьэто так

modelBuilder.Entity<MyEntity>(entity =>
            {
                entity.EnableConcurrency();
            });
0 голосов
/ 20 сентября 2018

Есть ли возможность настроить мои объекты для автоматического включения всех свойств в проверку параллелизма?

Да.Вы можете перебирать все свои объекты и свойства в 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);
}
...