小编Toa*_*oad的帖子

context.EnsureCreated() 抛出异常 - 已经是一个名为的表

使用 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)

c# sqlite entity-framework-core

4
推荐指数
1
解决办法
1041
查看次数

标签 统计

c# ×1

entity-framework-core ×1

sqlite ×1