首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >context.EnsureCreated()引发异常-已有名为的表

context.EnsureCreated()引发异常-已有名为的表
EN

Stack Overflow用户
提问于 2019-05-30 17:06:09
回答 1查看 1.2K关注 0票数 4

无论是否使用EnsureCreated(),使用Sqlite InMemory创建单元测试都会给出异常。我在MS Northwind数据库上测试。

如果我调用ensureCreated()会抛出异常"Microsoft.Data.Sqlite.SqliteException : SQLite错误1:‘已经有一个名为Region的表’。“

我的理解是,EnsureCreated()只会尝试创建尚未创建的数据库。

因此,它看起来已经创建了数据库,所以我尝试删除该调用,这导致了后来的异常,因为表不存在。因此,我用EnsureCreated()得到了异常,没有它就没有表。

我已经检查了context.OnModelCreating,表'Region‘只定义了一次。

请注意,这在现有的SQL数据库上运行得很好,还允许EFCore创建新的SQL数据库。此问题仅在sqlite内存模式下存在。

代码语言:javascript
运行
复制
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‘实体。我还注意到,这似乎是唯一一个实体名称已经与表名匹配的表。

代码语言:javascript
运行
复制
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");以查看这是否导致表被创建两次,但是,仍然存在相同的问题。目前,我已经删除了所有的表,除了2个我绝对需要运行测试的表,并且运行正常。把它们一个接一个地放回去看看是什么坏了。就会回来报到。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-30 23:32:41

我花了更多的时间删除所有的表,然后添加项目,直到问题再次出现,我才得到了答案。

该问题是由表上的索引与其他表上的索引相同或作为表名引起的。对于SQL Server和EF Core在内存中,这是可以的,因为它将它们视为表上的索引。但是,对于Sqlite,它不喜欢不同的对象具有相同的名称,而不管它们的明显作用域。

解决方案是确保所有对象的名称都是唯一的,这样就不会有任何冲突。在本例中,名称“Region”是一个表的名称,也是另一个表上的索引的名称。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56375048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档