РЕДАКТИРОВАТЬ:
Следуя совету @Jeroen Mostert, я включил MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT
в базе данных, и она работала без необходимости возиться с StoreGeneratedPattern
.Я все еще немного боюсь включить его в производственную базу данных.
ОРИГИНАЛ:
Я добавил запись:
using (var db = new Context()) {
db.Database.Log = l => Trace.WriteLine(l);
Тамбыло INSERT с SELECT из той же таблицы (без подсказки SNAPSHOT).
В .edmx поле временной метки оптимизированной для памяти таблицы имело StoreGeneratedPattern
, установленное на Identity
.В таблице есть SYSDEFAULT () CONSTRAINT.
Установка StoreGeneratedPattern
в None
заставила SaveChanges
производить только INSERT, и исключений не было.
В моем случае это было возможносначала извлеките SYSDATETIME, обновите поля меток времени, а затем сохраните их:
DateTime dbDate = await db.Database.SqlQuery<DateTime>("SELECT SYSDATETIME()").SingleAsync(cancellationToken);
entries.ForEach(l => l.TimestampField = dbDate);
db.Table.AddRange(entries);
await db.SaveChangesAsync(cancellationToken);
Я знаю, что это может быть неоптимальным и не поможет в каждом сценарии.