Это выглядит очень просто и немой, но по какой-то причине это не работает... Я получил эту строку в DbContext
OnModelCreating
:
modelBuilder.Entity<Client>().Property(o => o.RowVersion).IsConcurrencyToken();
И я получил эту строку в объекте Client:
public byte[] RowVersion { get; set; }
И миграция лесов заканчивается следующим образом:
AddColumn("dbo.Client", "RowVersion", c => c.Binary());
Если я добавлю атрибут [Timestamp]
в свойство, то он работает и дает мне:
AlterColumn("dbo.Client", "RowVersion", c => c.Binary(nullable: false, fixedLength: true, timestamp: true, storeType: "rowversion"));
Здесь что-то не хватает? Я действительно смущен... В учебнике больше ничего не нужно делать.
-Редактировать-
Добавление .IsRowVersion()
с использованием свободного API заставило его работать. Является ли учебное пособие Microsoft просто неправильным или является нарушением изменений без версий EF6? (Я на 6.1.1, я считаю)
Добавление.IsRowVersion() с использованием свободного API заставило его работать.
Является ли учебное пособие Microsoft просто неправильным или является нарушением изменений без версий EF6? (Я на 6.1.1, я считаю) Если кто-то может ответить на этот вопрос, я с радостью изменю принятый ответ вам более подробный ответ.
IsConcurrencyToken не работает для байт []
тип данных - nvarchar (max), его значение всегда равно null, если вы не инициализируете его, его значение не будет автоматически увеличиваться при обновлении записи.
IsRowVersion, с другой стороны, имеет datatype rowversion, поэтому его значение никогда не является нулевым, и его значение всегда автоматически увеличивается при обновлении записи. и он автоматически настраивает свойство как оптимистичный токен параллелизма.