Saya menggunakan EFCore BulkExtensions 2.5.0 dengan Entity Framework Core 2.2.3 dan EFCore.SQLite 2.2.6.

Saya memiliki kode seperti ini:

// 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; }
}

Kode aplikasi saya (yang menggunakan EFCore.Sql) menjalankan ini dengan baik. Tetapi ketika kode pengujian saya berjalan menggunakan SQLite di dalam memori, saya mendapatkan pengecualian:

Tidak ada tabel seperti itu: INFORMATION_SCHEMA.COLUMNS

Microsoft.Data.Sqlite.SqliteException : SQLite Error 1: 'tidak ada tabel seperti itu: INFORMATION_SCHEMA.COLUMNS'.

di Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db)
di Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements(Pengatur waktu stopwatch)+MoveNext()
di Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(PerilakuPerilakuPerintah)
di Microsoft.Data.Sqlite.SqliteCommand.ExecuteReaderAsync(Perilaku PerintahPerilaku, CancellationToken CancellationToken)
di Microsoft.Data.Sqlite.SqliteCommand.ExecuteDbDataReaderAsync(Perilaku PerintahPerilaku, CancellationToken CancellationToken)
di EFCore.BulkExtensions.TableInfo.CheckHasIdentityAsync(konteks DbContext, CancellationToken CancellationToken)
di EFCore.BulkExtensions.SqlBulkOperation.MergeAsync[T](Konteks DbContext, IList1 entities, TableInfo tableInfo, OperationType operationType, Action1 kemajuan, CancellationToken cancellingToken)
di MyCode.Repositories.UserRepository.<>c__DisplayClass5_0.d.MoveNext() di C:\projects\MyCode\Repositories\UserRepository.cs:line 48

INFORMATION_SCHEMA.COLUMNS bukan bagian dari model data saya dan bukan sesuatu yang saya coba buat atau kerjakan. Apakah saya perlu mengonfigurasi atau men-tweak EF Core atau SQLite agar mendukung operasi massal saat mode operasi dalam memori?

Saya telah mencoba mengaktifkan EF Core logging dan dapat melihat Model Db saya sedang diproses dan tabel dibuat, tetapi tidak ada output pada operasi massal, jadi saya tidak yakin pernyataan SQL yang dihasilkan apa yang mencari tabel Information_Schema.Columns ini.

0
Philip Pittle 15 Maret 2020, 10:16

1 menjawab

Jawaban Terbaik

Sepertinya ini adalah bug di EFCore.BulkExtensions untuk 2.5.0 yang tidak memiliki dukungan SQLite penuh. Ini berfungsi dengan versi 2.6.4: https://github.com/borisdj/ EFCore.BulkExtensions/issues/308

1
Philip Pittle 17 Maret 2020, 08:13