SQLite:实体框架6 - 错误的DbProviderFactory

时间:2015-05-28 09:56:56

标签: c# entity-framework sqlite database-connection

我正在为此疯狂。

我有一个标准的C#控制台应用程序,使用EF 6.1.3和SQLite 1.0.97.0。我已经设置了我的app.config以使用标准ADO连接到SQLite数据库,该工作正常:

static void StandardConnection()
{
    try
    {
        SQLiteConnection db = new SQLiteConnection(ConfigurationManager.ConnectionStrings["StudioContext"].ConnectionString);
        db.Open();

        Console.WriteLine("Connected");
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

但是为了爱我,我无法让EF连接到这个数据库。我已经尝试过我能读到的每一个解决方案,但每次尝试连接时,我发现DBProviderFactory始终指向{System.Data.SqlClient.SqlClientFactory}。这让我疯了。

enter image description here

关注,我的DbContext类:

public class SqliteContext: DbContext
{
    public SqliteContext()
        : base(ConfigurationManager.ConnectionStrings["StudioContext"].ConnectionString)
    {
        Database.SetInitializer<SqliteContext>(null);
    }
}

我不想首先启用代码,所以在这里禁用它,因为这是从现有的应用程序,从PHP移植到C#,我们必须使用当前的数据库。

尝试连接的代码:

static void EntityFrameworkConnection()
{
    try
    {
        using (var db = new SqliteContext())
        {
            if (db.Database.Connection.State == System.Data.ConnectionState.Closed)
            {
                db.Database.Connection.Open();
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

非常基本,打开上下文的实例,检查状态并连接,如果关闭,这一步不是必需的,因为我理解EF将打开连接,如果关闭,则执行类似保存的操作,例如,I& #39;我只是想让数据库连接。

我的app.config:

<?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>
  <connectionStrings>
    <add name="StudioContext" connectionString="Data Source=.\studio.db" providerName="System.Data.SQLite" />
  </connectionStrings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.97.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.97.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <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.SQLiteFactory, System.Data.SQLite, Version=1.0.97.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
      <remove invariant="System.Data.SQLite.EF6" />
      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=1.0.97.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    </DbProviderFactories>
  </system.data>

0 个答案:

没有答案