Вы можете использовать код, как описано Ладиславом Мрнкой, но
Есть небольшие различия между:
modelBuilder.Entity<MyEntity>()
.Property(e => e.Timestamp)
.IsConcurrencyToken()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
и
modelBuilder.Entity<MyEntity>()
.Property(e => e.Timestamp)
.IsRowVersion();
секунда эквивалентна [Timestamp]
атрибут, но сначала генерирует следующую миграцию, когда мы меняем '[Timestamp] `на первую версию свободного кода API:
public override void Up()
{
AlterColumn("dbo.MyEntity", "Timestamp", c => c.Binary());
}
public override void Down()
{
AlterColumn("dbo.MyEntity", "Timestamp", c => c.Binary(nullable: false, fixedLength: true, timestamp: true, storeType: "rowversion"));
}