Добавление записей в оптимизированную для памяти таблицу с использованием Entity Framework - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь добавить записи в таблицу, оптимизированную для памяти, используя EF, например:

using (var db = new Context())
{
    db.Table.AddRange(newEntries);
    await db.SaveChangesAsync(cancellationToken);
}

И получите ошибку, как показано ниже:

SqlException: доступ к таблицам, оптимизированным для памяти, с помощью READ Уровень изоляции COMMITTED поддерживается только для автоматической фиксации сделки. Не поддерживается для явного или неявного сделки. Обеспечить поддерживаемый уровень изоляции для памяти оптимизированная таблица с использованием табличной подсказки, например WITH (SNAPSHOT).

Как я могу выяснить причину этой проблемы?

1 Ответ

0 голосов
/ 04 июля 2019

РЕДАКТИРОВАТЬ:

Следуя совету @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);

Я знаю, что это может быть неоптимальным и не поможет в каждом сценарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...