使用 Sqlite InMemory 创建单元测试在使用和不使用 EnsureCreated() 时都会给出异常。我正在 MS Northwind 数据库上进行测试。
如果我调用 ensureCreated() 会引发异常“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();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:“区域”实体定义如下。我还注意到,这似乎是实体名称已与表名称匹配的唯一表。
modelBuilder.Entity<Region>(entity =>
{
entity.ToTable("Region");
entity.HasKey(e => e.RegionId)
.ForSqlServerIsClustered(false); …Run Code Online (Sandbox Code Playgroud)