Ручное открытие EntityConnection в базе данных SQLite вызывает исключение ProviderIncompatibleException


Для целей интеграционного тестирования я хотел бы вручную создать и открыть EntityConnection в настройке тестового приспособления. Это не удается со следующим исключением при вызове метода Open ():

система.Данные.ProviderIncompatibleException: значение null было возвращено после вызова метода 'GetService' на экземпляре поставщика хранилища типа ' System.Данные.SQLite.Помощью ef6.SQLiteProviderFactory'. Поставщик магазина может работать неправильно.

Я использую то же самое строка подключения, которая также используется, когда EF заботится об открытии соединения. Если я запускаю тот же набор тестов с автоматической обработкой соединений EF, он работает.

...
[TestFixtureSetUp]
public void FixtureSetUp()
{
    // Setup database 
    // Setup data access
    ... 
    var ec = new EntityConnection([ConnectionString]);
    ec.StoreConnection.Open(); --> WORKS!!
    ec.Open(); -> Throws
}
...

Строка подключения выглядит следующим образом:

metadata=res://*/Test.TestModel.csdl|res://*/Test.TestModel.ssdl|res://*/Test.TestModel.msl;provider=System.Data.SQLite;provider connection string="data source=C:Testtmp4C80.tmp;read only=False;pooling=False;failifmissing=True;synchronous=Full;datetimekind=Utc;enlist=True;setdefaults=False;datetimeformat=ISO8601;journal mode=Off;cache size=4194304"

Приложение.конфигурация для сборки NUnit выглядит следующим образом

<?xml version="1.0" encoding="utf-8"?>

<configuration>
    <configSections>
        <section name="entityFramework"
                 type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                 requirePermission="false" />
    </configSections>
    <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
        <providers>
            <provider invariantName="System.Data.SqlClient"
                      type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
            <provider invariantName="System.Data.SQLite"
                      type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
        </providers>
    </entityFramework>
    <!-- Register protable database data providers -->
    <system.data>
        <DbProviderFactories>
            <remove invariant="System.Data.SQLite" />
            <add name="SQLite Data Provider" invariant="System.Data.SQLite"
                 description=".Net Framework Data Provider for SQLite"
                 type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
        </DbProviderFactories>
    </system.data>
</configuration>

Помимо NUnit для тестирования я использую Entity Framework 6.1.1 и System.Данные.SQLite 1.0.94.0.

Edit: странная вещь заключается в том, что открытие соединения магазина предоставленного подключение сущности вручную работает...

1 2

1 ответ:

Я обнаружил, что использую EntityConnection из системы .Данные.Сущность вместо сборки EntityFramework.