Я пытаюсь настроить 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()
;"
Что здесь происходит?Заранее спасибо