Контекст SQLite в памяти выдает исключение «нет такой таблицы» - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь использовать базу данных 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 серверу.

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; }
    }

что я отсутствует ? : /

1 Ответ

0 голосов
/ 05 февраля 2020

Вероятно, необходимо вручную открыть соединение. Этот пример кода работает

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);
        };
}
...