Массовая вставка EFCore и SQLite в памяти: такой таблицы нет: INFORMATION_SCHEMA.COLUMNS " - PullRequest
0 голосов
/ 15 марта 2020

Я использую EFCore BulkExtensions 2.5.0 с Entity Framework Core 2.2.3 и EFCore.SQLite 2.2.6.

У меня есть такой код:

// Repo that throws exception on BulkInsert
public class UserRepository
{
   private readonly IDbContextProvider<ReportContext> _dbContextProvider;

   public async Sync(IList<User> users)
   { 
        await _dbContextProvider.Context.BulkInserOrUpdateAsync(users);
   }
}

// Poco Model
public class User
{
   public string Id {get;set;}
   public string Name {get; set;}
}

// Simple DbContext
public class ReportsContext : DbContext
{
   public DbSet<User> Users { get; set; }
}

Мой код приложения (который использует EFCore.Sql) прекрасно работает. Но когда мой тестовый код выполняется с использованием SQLite в памяти, я получаю исключение:

Нет такой таблицы: INFORMATION_SCHEMA.COLUMNS

Microsoft.Data.Sqlite.SqliteException: Ошибка SQLite 1 : 'нет такой таблицы: INFORMATION_SCHEMA.COLUMNS'.

в Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForR C (Int32 r c, sqlite3 db)
в Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements (таймер секундомера) + MoveNext
в Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader (поведение CommandBehavior)
в Microsoft.Data.Sqlite.SqliteCommand.ExecuteReaderAsyn c (поведение CommandBehavior, CancellationToken cancellationToken)
в Microsoft. SqliteCommand.ExecuteDbDataReaderAsyn c (поведение CommandBehavior, CancellationToken cancellationToken)
в EFCore.BulkExtensions.TableInfo.CheckHasIdentityAsyn c (контекст DbContext, CancellationToken.Teль контекст, IList 1 entities, TableInfo tableInfo, OperationType operationType, Action 1 прогресс, CancellationToken cancellationToken)
в MyCode.Repositories.UserRepository. <> c__DisplayClass5_0. d.MoveNext () в C: \ projects \ MyCode \ Repositories \ UserRepository.cs: строка 48

INFORMATION_SCHEMA.COLUMNS не является частью моей модели данных и не является чем-то, что я Я пытаюсь создать или работать с. Нужно ли мне настраивать или настраивать EF Core или SQLite для поддержки массовых операций при работе в режиме памяти?

Я пытался включить ведение журнала EF Core и могу видеть мои Db Модель обрабатывается и таблицы создаются, но нет вывода на массовые операции, поэтому я не уверен, что сгенерированные операторы SQL ищут эту таблицу Information_Schema.Columns.

1 Ответ

0 голосов
/ 17 марта 2020

Похоже, что это ошибка в EFCore.BulkExtensions для 2.5.0, где не было полной поддержки SQLite. Работает с версией 2.6.4: https://github.com/borisdj/EFCore.BulkExtensions/issues/308

...