Создание модульных тестов с Sqlite InMemory дает исключения с и без EnsureCreated ().Я тестирую базу данных MS Northwind.
Если я вызываю sureCreated (), возникает исключение «Microsoft.Data.Sqlite.SqliteException: ошибка SQLite 1:« таблица с именем Region уже существует ».
Насколько я понимаю, EnsureCreated () будет пытаться создать базу данных только в том случае, если она еще не создана.
Выглядело так, как будто она уже создала БД, поэтому я попытался удалить этот вызовчто позже привело к исключению, потому что таблицы не существуют.Итак, я получаю исключения с EnsureCreated () и без таблиц без него.
Я уже проверил context.OnModelCreating и таблица 'Region' определяется только один раз.
Обратите внимание, что это работаетотлично работает на существующей базе данных SQL, а также позволяет EFCore создавать новую базу данных SQL.Проблема существует только в режиме sqlite в памяти.
public async Task UpdateCategoryWithCorrectEtag(Category expectedCategory)
{
var connection = new SqliteConnection("DataSource=:memory:");
connection.Open();
var builder = new DbContextOptionsBuilder<NorthwindContext>().UseSqlite(connection);
var context = new NorthwindContext(builder.Options);
try
{
context.Database.EnsureCreated();
var x = context.Categories.Count();
}
finally
{
context.Database.EnsureDeleted();
connection.Close();
}
}
РЕДАКТИРОВАТЬ: сущность 'Region' определяется следующим образом.Я также отмечаю, что, похоже, это единственная таблица, в которой имя сущности уже совпадает с именем таблицы.
modelBuilder.Entity<Region>(entity =>
{
entity.ToTable("Region");
entity.HasKey(e => e.RegionId)
.ForSqlServerIsClustered(false);
entity.Property(e => e.RegionId)
.HasColumnName("RegionID")
.ValueGeneratedNever();
entity.Property(e => e.RegionDescription)
.IsRequired()
.HasMaxLength(50);
});
ОБНОВЛЕНИЕ: Я уже пытался удалить строку entity.ToTable ("Region");чтобы увидеть, не вызывало ли это создание таблицы дважды, у нее все еще есть та же проблема.В настоящее время я удалил все таблицы, кроме двух, которые мне абсолютно необходимы для запуска теста, и он работает.Положите их обратно один за другим, чтобы увидеть, что ломается.Отзовусь.