#c# #entity-framework #ef-code-first
#c# #entity-framework #сначала ef-код
Вопрос:
Простой, но все же загадочный для меня: почему для классов StringPropertyConfiguration (и всех других свойств) есть 2 перегрузки IsConcurrencyToken()
?
Первый:
public StringPropertyConfiguration IsConcurrencyToken()
Настраивает свойство для использования в качестве маркера оптимистичного параллелизма.
И второй:
public StringPropertyConfiguration IsConcurrencyToken(bool?)
Определяет, должно ли свойство использоваться в качестве токена оптимистичного параллелизма.
Зачем вам использовать одно поверх другого? На мой взгляд, между этими двумя перегрузками вообще нет разницы (по крайней мере, при работе с ними)…
Используя первый, вы могли бы написать что-то вроде:
modelBuilder.Entity<Author>()
.Property(x => x.Name)
.IsConcurrencyToken();
И, используя второй, вы бы написали:
modelBuilder.Entity<Author>()
.Property(x => x.Name)
.IsConcurrencyToken(true/false/null);
Я что-то пропустил?
Ответ №1:
Мое мнение…
IsConcurrencyToken()
Значение по умолчанию равно true, чтобы обеспечить простой и плавный способ определения сущности.
IsConcurrencyToken(bool?)
Позволяет автору окончательно установить ConcurrencyMode
сущность. Это полезно для сложных сценариев:
- Переопределение
[ConcurrencyCheck]
атрибута в POCO - Разрешение соглашения (удалено в EF 4.1 RTW) для включения / отключения
ConcurrencyMode
на основе некоторого пользовательского соглашения
Наконец, я думаю, что IsConcurrencyToken(false)
это лучше, чем IsNotConcurrencyToken()
.
Комментарии:
1. 1 для «IsConcurrencyToken(false) лучше, чем IsNotConcurrencyToken()». Это то же самое, но слишком быстрое чтение второго может заставить кого-то подумать, что свойство ЯВЛЯЕТСЯ concurrencyToken (можно просто «пропустить» «НЕ» при быстром чтении).