内存中SQLite上下文抛出“无此表”异常

问题描述 投票:0回答:1

我尝试使用内存中的SQLite数据库来改进我的单元测试,我的测试看起来像]

[Fact]
public void CreateSampleType()
{
    var sampleType = new SampleType("Type One");

    var options = new DbContextOptionsBuilder<SamplesContext>()
        .UseSqlite("DataSource=:memory:")
        .Options;

    using (var context = new SamplesContext(options))
    {
          context.Database.EnsureCreated();

          context.SampleType.Add(sampleType);
          context.SaveChanges();
     };
}

context.SaveChanges();行引发

Microsoft.Data.Sqlite.SqliteException:SQLite错误1:'没有这样的表格:SampleType'。

SamplesContext在连接到SQL Server时起作用。

public class SamplesContext : DbContext
    {
        public SamplesContext(DbContextOptions<SamplesContext> options)
            : base(options)
        {

        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<SampleType>().ToTable("SampleType", schema: "enum").HasKey("Id");
        }

        public virtual DbSet<SampleType> SampleType { get; set; }
    }

我想念什么? :/

sqlite entity-framework-core in-memory-database
1个回答
0
投票

可能需要手动打开连接。此代码示例有效

using (var connection = new SqliteConnection("DataSource=:memory:"))
{
        connection.Open();

        var options = new DbContextOptionsBuilder<SamplesContext>()
            .UseSqlite(connection)
            .Options;

        using (var context = new SamplesContext(options))
        {
               context.Database.EnsureCreated();

               context.SampleType.Add(sampleType);
               context.SaveChanges();

               var items = context.SampleType.ToList();
               Assert.Single(items);
        };
}
© www.soinside.com 2019 - 2024. All rights reserved.