EF6 и SQLite In-Memory выдает «SQLiteException: ошибка логики SQL отсутствует в такой таблице» - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь настроить SQLite (режим в памяти) вместе с Entity Framework 6, чтобы быстрее создавать интеграционные тесты.Вот как выглядит мой packages.config:

<packages>
  <package id="EntityFramework" version="6.2.0" targetFramework="net472" />
  <package id="System.Data.SQLite" version="1.0.111.0" targetFramework="net472" />
  <package id="System.Data.SQLite.Core" version="1.0.111.0" targetFramework="net472" />
  <package id="System.Data.SQLite.EF6" version="1.0.111.0" targetFramework="net472" />
  <package id="System.Data.SQLite.Linq" version="1.0.111.0" targetFramework="net472" />
</packages>

И это строка моего подключения: <add name="MyDBContext" connectionString="Data Source=:memory:" providerName="System.Data.SQLite" />

Однако, когда я запускаю следующий код, исключение типа System.Data.SQLiteException ссообщение SQL logic error no such table: People создается в SaveChanges().

using (var context = new MyDBContext())
{
    context.Persons.Add(new Person()
    {
        Name = "Someone",
    });

    context.SaveChanges();
}

Это, похоже, как-то связано с миграциями EF, поскольку я вижу следующие ошибки в выходных данных отладки непосредственно перед вызовом SaveChanges():

SQLite error (1): no such table: __MigrationHistory in "SELECT 
[GroupBy1].[A1] AS [C1]
FROM ( SELECT 
    Count([Filter1].[A1]) AS [A1]
    FROM ( SELECT 
        1 AS [A1]
        FROM [__MigrationHistory] AS [Extent1]
        WHERE [Extent1]
SQLite error (1): no such table: __MigrationHistory in "SELECT 
[GroupBy1].[A1] AS [C1]
FROM ( SELECT 
    Count([Extent1].[A1]) AS [A1]
    FROM ( SELECT 
        1 AS [A1]
        FROM [__MigrationHistory] AS [Extent1]
    )  AS [Extent1]
SQLite error (1): no such table: EdmMetadata in "SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[ModelHash] AS [ModelHash]
FROM [EdmMetadata] AS [Extent1]
ORDER BY [Extent1].[Id] DESC LIMIT 1"

... и затем сразу после моей попытки спасти

SQLite error (1): no such table: People in "INSERT INTO [People]([Name], [Age])
 VALUES (@p0, @p1);
SELECT [Id]
FROM [People]
WHERE last_rows_affected() > 0 AND [rowid] = last_insert_rowid()
;"

Что здесь происходит?Заранее спасибо

...