web-dev-qa-db-ja.com

System.Data.SQLite 1.0.91.0およびEF6.0.2

Visual Studio 201#のEntity Framework 6で動作する新しいSystem.Data.SQLite 1.0.91.0を手に入れた人はいますか?持っている場合、どのようにそれをしましたか?

更新-2014年3月20日:System.Data.SQLite 1.0.92.0がリリースされましたが、VS2013でEDMXを作成することができませんでした:(パッケージマネージャーを使用することになりました(EF6。#。#は新しいSQLiteの依存関係であるためNuGetパッケージ):

uninstall-package entityframework -force

vS2013を再起動し、古いEF5をオンにして、VS2013で既存のデータベースからEDMXを生成します。

install-package entityframework -version 5.0.0

注:これは複雑なマルチテーブルSQLiteリレーショナルデータベーステストではなかったため、2つ以上のナビゲーション(FK)関係を持つものを使用すると、他にどのような問題が発生するかわかりません:/

ANSWER for EDMX/Model First:(更新-2014年3月2日)回避策を見つけましたが、十分な一貫性がなく、有効なソリューションと見なすには手順が多すぎます。基本的に:

  • すべてのクラスファイルを作成します。

  • テーブルを使用して既存のSQLiteデータベースに接続し、

  • web/app.configを、未解決のSQLiteトラブルチケットのmistachkinの説明に従って変更します( http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77 )、 cdsl/.ssdl/.mslピースの偽造、および

  • 次に、プロジェクトを再構築する前に空のEDMXでデザイナーのすべてのエンティティモデルを手動で作成してから...

  • エンティティを右クリックして、「データベースから更新」を選択します...

EF/VS2013は.tt/DbContesxtを追加する場合と追加しない場合があります。あまりにも「ヒットまたはミス」:(

既存のSQLiteデータベースを使用する場合と使用しない場合の「コードファースト」の回答(PMCB、Drexter、およびJimiの提案に基づく)。ただし、Visual Studio 2013でEFモデルまたはEDMXファイル[sic-概念スキーマ定義言語(.CSDL)、ストアスキーマ定義言語(.SSDL)、マッピング仕様言語(.MSL)]を自動的に生成できないことに注意してください。 EDMXファイルを手動で作成してEFに満足できるかどうかを確認しないでください。そうしても、すべての手動作成/マッピング/変更/ XML編集を行うと、エンティティベースのフレームワークの目的/概念全体が無効になるようです...

<connectionStrings>
    <add name="DogsContext" connectionString="Data Source=|DataDirectory|\dogs.s3db;" providerName="System.Data.SQLite" />
</connectionStrings>
<entityFramework>
    <providers>
       <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    </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.91.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.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    </DbProviderFactories>
</system.data>

これがテストクラスです(SQLiteで動作させるにはDogIDをInt64に変更する必要があることに注意してください...):

using System.Data.Entity;

namespace WebApplication1.Models
{
    public class Dog
    {
        public Dog() { }

        public Int64 DogID { get; set; }
        public string DogName { get; set; }
    }
}

テストDbContextは次のとおりです。

using System.Data.Entity;

namespace WebApplication1.Models
{
    public class DogsContext : DbContext
    {
        public DogsContext() : base() { }

        public DbSet<Dog> DogNames { get; set; }
    }
}

=============質問の元の詳細==================

SQLite 1.0.91.0が昨日リリースされました( http://system.data.sqlite.org/index.html/doc/trunk/www/news.wiki )「Entity Framework 6のサポートを追加」 。付属の「Readme」には、web.config/app.configに以下を追加する警告があります。

<configuration>
<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.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    </DbProviderFactories>
</system.data>
</configuration>

VS2013でNuGetを使用して「System.Data.SQLite(x86/x64)」を追加すると、次の行がweb.config/app.configに追加されます。

<entityFramework>
...
<providers>
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
...
</entityFramework>

テストとして、動作中のNET4.5.1/MVC4/EF5/System.Data.SQlite 1.0.90アプリケーションのコピーを作成し、PM:update-packageを実行しました。上記の行がweb.configに正常に追加され、必要な「DbProviderFactories」ピースが追加されました。再構築して実行...「プロバイダが見つかりません」で失敗します。 「DbProviderFactories」なしで試してみます...「プロバイダが見つかりません」で失敗します。新しい「プロバイダー」ピースを削除します...「プロバイダーが見つかりません」で失敗します。それで、私は新しいプロジェクトを試みますが、それが問題である場合にアイデンティティ(OWIN)の有無にかかわらず。どちらも機能しません...アイデアがほとんど不足しているので、Google/StackOverflowの検索後にここで質問します。

============ 2014年2月14日===============

残念ながら、変更されたエントリと多数のバリエーションが私のPCで機能しませんでした... Win8.1 Pro x64でVS 2013 Proを使用しています。 System.Data.SQLiteを再インストールしました。少なくとも、既存のSQLiteデータベースとVS2013が作成した新しいデータベースの両方で新しいエラーが発生しています(アクセスして、テーブルがゼロの適切な構造を持っていることがわかります)。

"An error occurred connecting to the database. The database might be unavailable. An 
exception of type 'System.Data.Entity.Core.ProviderIncompatibleException' occurred. The 
error message is: Schema specified is not valid. Errors: StoreSchemaDefinition(2,64) : 
Error 0175: The ADO.NET provider with invariant name 'System.Data.SQLite.EF6' is either 
not registered in the machine or application config file, or could not be loaded. See the 
inner exception for details.'"

EF6とSystem.Data.SQLite(x86/x64)の両方が、NuGetを介して真新しいMVC WebアプリとWindowsコンソールアプリに取り込まれました。両方とも上記のエラーを生成しました... VS3013に何か問題があるのではないかと疑い始めていますが、MVC4/SQLite/EF5で作業できる場合、ダウンロードとパッチの適用にさらに6時間を費やしたくありません...

===== 2014年2月17日========

@ジミ-ここに運はありません。新しいMVCとWindowsアプリケーションプロジェクトでNET 4.5と4.5.1を試しました。 EF6.0.0とEF6.0.2で試しました。 NuGetから "System.Data.SQLite(x86/x64)"を追加した後、3x SQLite.Data.xxx.dll参照をSystem.Data.SQLiteのインストールからのローカルコピーに置き換えてみました。また、DBFactoriesをさまざまなバージョンのWeb.ConfigおよびApp.Configに追加する代わりに、NuGet“ System.Data.SQLite.MSIL”パッケージを試しました。

また、NET 4.0 MVC4 Webアプリケーションを作成しようとしましたが、NuGetの「System.Data.SQLite(x86/x64)」にはEF6の要件が含まれるようです。希望を持って、私はそれに沿ってさまざまな「保存/新規接続の作成/web.config/etcの編集」を試みましたが、うまくいきませんでした。今はあきらめて、DatasetsでSQLiteに戻ったので、DataTablesを "AsEnumerable"(またはJava(jdbc))にして、System.Data.DataSetExtensionsでLinqを使用できます。 Android最小限のアプリインターフェースを備えたOSデバイス)上のデータベースのオフラインコピー。

========= 2014年2月19日=======

@Christian Sauer-EF6とSystem.Data.SQLite(またはSystem.Data.SQLite.EF6)を一緒に動作させることはできませんでしたが...

http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77 で最新のSQLite NuGetパッケージがあることを示す更新を見つけました。

mistachkin added on 2014-02-19 03:39:35:

All NuGet packages have been updated to 1.0.91.3.  Several fixes are included
that pertain to supporting Entity Framework 6.

私は今、新しいプロジェクト(.NET 4.5.1を対象とするEF6.0.2およびSQLite 1.0.91.3を使用するVS2013のMVC Webプロジェクト)でテストしています...

新しいSQLite 1.0.91.3で再び不運になりました。 web.configは次のように変更されました。

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
      <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" />
      <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" />
   </DbProviderFactories>
 </system.data>

私は仕事の後に設定をいじってみて(JimiとPCMBによって提案されたように)、結果を投稿します。

System.Data.SQLiteの32ビットバージョンと64ビットバージョンの両方(GACへの追加の有無にかかわらず)を再インストールしようとしましたが、EF6はSQLiteで動作しません。モデルとマッピングを手動で構築しようとすると、EF6を参照/試行するたびに失敗します。 Entity Data Models(既存のSQLiteまたは新しいSQLiteデータベースから生成する)の作成に関しては、構成、接続、またはプロバイダーに対して何を行っても、失敗/エラーになります。

=========== 2014年2月22日=============

彼らはSystem.Data.SQLite 1.0.91.3アップデートを1.0.91.0にプル/ロールバックしました。未解決のチケット( http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77 )がまだ開いており、mistachkinによるいくつかの提案が含まれています。ここに試してみてくださいapp.configミスタチキンがあります(この設定は以前または私のために機能しませんでした...):

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>
  <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.91.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.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add name="northwindEFEntities" connectionString="metadata=res://*/NorthwindModel.EF6.2013.csdl|res://*/NorthwindModel.EF6.2013.ssdl|res://*/NorthwindModel.EF6.2013.msl;provider=System.Data.SQLite.EF6;provider connection string=&quot;data source=.\northwindEF.db&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <entityFramework>
    <providers>
     <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    </providers>
  </entityFramework>
</configuration>

dLLをGACに追加するためにmistachkinの提案を試みた後(.NET "gacutil.exe"で行われた)...

42
PWRR2207

私はそれを理解する前に今日数時間これに取り組んだ。 NuGetパッケージは、適切なエントリ「System.Data.SQLite.EF6」をEntityFrameworkプロバイダーファクトリに追加しますが、古い「System.Data.SQLite」エントリを削除またはコメント化する必要があります。プロバイダーエントリのいずれかが無効である場合、EFコンテキストビルダーが爆破し、古い1.0.91 SQLiteプロバイダーはEF6でサポートされません。

編集:構成をクリーンアップすると、他のコンテキストオブジェクト(SQL Server)をインスタンス化できましたが、それでもSQLiteコンテキストオブジェクトが正しくインスタンス化されません。内部の例外は

要求された.Net Frameworkデータプロバイダーが見つかりません。インストールされていない可能性があります。

編集2 /解決策最後にそれを見つけました! System.Data.SQLiteには、接続文字列で指定された値ではなくSystem.Data.SQLiteプロバイダー名への参照を強制する問題があると思います。 EntityFrameworkプロバイダーセクションに「System.Data.SQlite」という名前と「System.Data.SQLite.EF6」という名前の2つのエントリを作成することで、この問題を回避できましたが、実際には両方のプロバイダーがEF6プロバイダーを使用します。

<entityFramework>
...
<providers>
    <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</providers>
23
pmcb

これが私の設定ファイル全体です。 SQLite 1.0.91でEF 6.0.2を実行しています。モデルジェネレーターはまだ試していませんが、コンテキストオブジェクトは正常に機能し、コンテキストを介した挿入/更新/削除、およびdbcontextを介したダイレクトSQLコマンドをテストしました。その秘TheはentityFramework/providersセクションにあります。 EF6プロバイダーのSQLiteプロバイダーエントリを複製する必要がありましたが、古い不変名と新しい不変名を使用しました。

    <?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" />
    <section name="electra.common.configuration.electraConfiguration" type="Electra.Common.Configuration.ElectraConfiguration, Electra.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" restartOnExternalChanges="true" />
    <!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
  </startup>
  <connectionStrings>
    <add name="DBContext_Server" 
        connectionString="server=sunset\sql2012;Integrated Security=SSPI;database=Electra;Pooling=true;max pool size=1000;min pool size=5;Connection Lifetime=30;connection timeout=15" 
        providerName="System.Data.SqlClient" />
    <add name="DBContext_ElectraPOS" 
        connectionString="Data Source=D:\Electra\ElectraWeb\PosEngine.Repository\ElectraPOS.db" 
        providerName="System.Data.SQLite.EF6" />
  </connectionStrings>
    <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.91.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.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
        </DbProviderFactories>
    </system.data>
  <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.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
        <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    </providers>
  </entityFramework>
  <electra.common.configuration.electraConfiguration>
    <logging>
      <levels info="true" warning="true" error="true" debug="true" />
    </logging>
  </electra.common.configuration.electraConfiguration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.2.0" newVersion="2.0.2.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
10
pmcb

6時間の試行錯誤、壁に頭を叩き、開発者が物事がどのように機能するかを解明した後、VS 2013で機能するようになったと思います。

この手順に従ってください。

  1. System.Data.SQLite をまだインストールしていない場合はインストールします。
  2. プロジェクトのSystem.Data.SQLiteをNuGetから取得します(app.configにいくつかのものが追加されることに注意してください)。
  3. これは重要な部分です。ソリューションを保存し、exitVS 2013。
  4. ソリューションをリロードすると、ADO.NET Entity Data Modelをプロジェクトに追加できます。

モデルを追加するたびにVS 2013を終了し、must「新しい接続...」を使用してモデルを作成する必要があります

なぜこのように機能するのですか?宇宙は神秘的な方法で機能していると私は言います。

編集:さらに作業を進めると、モデルへの接続を開くには、構成内のプロバイダーを<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />から<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />に変更する必要があることがわかりました。 DbProviderFactoriesは、system.dataタグ内にある必要があります。

6
Jimi

同じ問題に関する私のすべての経験を共有したい

System.Data.SQLite 1.0.94およびEF6を使用しようとしましたが、データベースへの接続に問題があります。私はVS 2013.4で働いています。 pmbcが示唆したように、すべての必要なパッケージをインストールし、web.configをチェックした後、System.Data.Entity.Core.ProviderIncompatibleException型の接続と例外で​​同じ問題が依然として発生しました。

インターネットでさらに検索を行った後、VS2013のこのアドオンがSQL CompactおよびSQLiteデータベースで動作することがわかりました。 https://visualstudiogallery.msdn.Microsoft.com/0e313dfd-be80- 4afb-b5e9-6e74d369f7a1

今、既存のデータベースとその他すべてのものを使用して、既存のSQLiteデータベースを使用するか、VSから新しいデータベースを作成する/ EFモデルを作成することができます

お役に立てれば

[〜#〜] update [〜#〜]

ちょっとした助けが必要です。ここに私の結果の.configファイルセクションがあります

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  <providers>
    <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.95.0, Culture=neutral" />
    <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.95.0, Culture=neutral" />
  </providers>
</entityFramework>
<system.data>
  <DbProviderFactories>
    <remove invariant="System.Data.SQLite" />
    <remove invariant="System.Data.SQLite.EF6" />
    <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
    <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" />
  </DbProviderFactories>
</system.data>

また、ローカルにインストールしたSystem.Data.SQLite.dllライブラリのバージョン番号を確認します(defaulrにより、GACにインストールされます)。GACバージョンと現在のプロジェクトのパッケージのバージョンは同じでなければなりません。そうしないと、アプリを起動したときに例外をキャッチします

5
Andrew

VS 2010では、コンソールアプリを使用して最初にコードを実行しました。いずれにせよ、ここに私のapp.configがあります。これはBriceのEF6 SQLiteチュートリアルに基づいています( http://www.bricelam.net/2012/10/entity-framework-on-sqlite.html ) :

<?xml version="1.0"?>
 <configuration>
 <configSections>
    <!-- For more information on Entity Framework configuration, visit     http://go.Microsoft.com/fwlink/?LinkID=237468 -->
<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.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0"/>
  </parameters>
</defaultConnectionFactory>
<providers>
  <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</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.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</DbProviderFactories>
</system.data>
<connectionStrings>
 <add name="ChinookContext" connectionString="Data Source=|DataDirectory|Chinook_Sqlite_AutoIncrementPKs.sqlite" providerName="System.Data.SQLite"/>
</connectionStrings>
</configuration>
4
Drexter

最後に、このソリューションは私のために働きます。 Dot Net Framework = 4.5.1 Entity framework = 6.1.1

これをダウンロード: sqlite-netFx451-setup-bundle-x86-2013-1.0.94.0.exe

<?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" />
    <!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
  </startup>

  <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.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
    </providers>
  </entityFramework>

  <system.data>
    <!--
        NOTE: The extra "remove" element below is to prevent the design-time
              support components within EF6 from selecting the legacy ADO.NET
              provider for SQLite (i.e. the one without any EF6 support).  It
              appears to only consider the first ADO.NET provider in the list
              within the resulting "app.config" or "web.config" file.
    -->
    <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.94.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" />
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add name="VelocityDBEntities" connectionString="metadata=res://*/AppData.Model1.csdl|res://*/AppData.Model1.ssdl|res://*/AppData.Model1.msl;provider=System.Data.SQLite.EF6;provider connection string=&quot;data source=F:\VelocityPOS\VelocityDB.sqlite&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>
3
Umar Abbas

System.Data.SQLite.EF6ライブラリのCopy local = True(References-> System.Data.SQLite.EF6-> Property)を設定するだけで動作します

3

私は同じ種類のエラーを経験しましたが、他の答えでカバーされていないように思われる理由のため。だから私は自分のケースを共有したいと思います。

EDMXを含むアセンブリでは、すべてが問題ありませんでした。クライアント(実行中)アセンブリでは、実行時に常に同じエラーが発生しました(Entity Frameworkプロバイダータイプ 'System.Data.SQLite.EF6.SQLiteProviderServices、System.Data.SQLite.EF6'は、ADOのアプリケーション構成ファイルに登録されています。不変名「System.Data.SQLite.EF6」のNETプロバイダーをロードできませんでした。

EDMXアセンブリの場合、「ローカルコピー」がtrueに設定されていますが、アセンブリの実行ではないことに気付きました。私はそれを修正し、それは大丈夫だった。したがって、この問題も発生し、GACにSQLiteプロバイダーがない場合は、SQLite DLLの「ローカルコピー」を有効にしているかどうかを参照してください。

私はプロバイダーやその他の多くのことをチェックするのに長い時間を費やしていなかったので、他の人にも役立つことを願っています!

2
AFract

それは私のために働く:

<entityFramework>
    <providers>
        <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
        <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
    </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" />
        <!--<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
        <remove invariant="System.Data.SQLite" />
        <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" />-->
    </DbProviderFactories>
</system.data>

最新のnugetパッケージ(1.0.94.1)の場合: https://www.nuget.org/packages/System.Data.SQLite/ およびSQLiteツール:32ビットWindows(.NET Frameworkのセットアップ4.5.1) http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

2
akhansari

インターネットで数時間かけて掘り下げた後、ここで実用的なソリューションを紹介します

<?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>
    <providers>
      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="NorthwindContext" connectionString="Data Source=Northwind.sl3" providerName="System.Data.SQLite.EF6" />
  </connectionStrings>
  <system.data>
    <DbProviderFactories>
      <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" />
    </DbProviderFactories>
  </system.data>
</configuration>

プロジェクト

2
user1075940
<providers>
  <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</providers>

これは私にとってはうまくいきましたが、実行中にいくつかの内部エラーがあります。おそらく、EFがコード用に2つの他のテーブルを最初に持っている方法と__MigrationHistoryとEdmMetadataの違いを実行します。とりあえず些細なことだと思いますが、もし本当にCodeFirstを利用したいのであれば、これらのテーブルを手動で作成する必要があります。

編集-プロバイダーリストのエントリのみで、SqlServerへのすべての参照を削除しました...

Vs2013 Ultimateの最新のSQLite Nuget。

1
mvermef

ここに私のために働いた解決策があります。

System.Data.SQLiteパッケージをインストールし、dbファクトリセクションが次のようになっていることを確認します。

<DbProviderFactories>
  <remove invariant="System.Data.SQLite" />
  <remove invariant="System.Data.SQLite.EF6" />
  <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
  <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" />
</DbProviderFactories>
1
mrstebo

Nuget Package Managerから最新のSQLiteをインストールすると、SQLiteパッケージのインストール時にエラーが発生しました(sqlite DBでedmxを必要とするプロジェクトで作業中)。

ステップ1:メッセージを注意深く読んでください。エラーメッセージが伝えようとしていることを明らかにすることができます。

例えば:

An error occurred while connecting to the database. The database might be unavailable. An exception of type 'System.InvalidCastException' occurred. 

The error message is: '[A]System.Data.SQLite.SQLiteConnection cannot be cast to [B]System.Data.SQLite.SQLiteConnection. 

Type A originates from 'System.Data.SQLite, Version=1.0.105.1, Culture=neutral, PublicKeyToken=db937bc2d44ff139' in the context 'Default' 
at location 'C:\WINDOWS\Microsoft.Net\Assembly\GAC_32\System.Data.SQLite\v4.0_1.0.105.1__db937bc2d44ff139\System.Data.SQLite.dll'. 

Type B originates from 'System.Data.SQLite, Version=1.0.106.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139' in the context 'LoadNeither' 
at location 'C:\Users\Ganesh Kamath\AppData\Local\Microsoft\VisualStudio\14.0\ProjectAssemblies\og1mcjvn01\System.Data.SQLite.dll'.'.

これを読んだ後、アップグレードにバージョン1.0.106.0を選択したことに気付きました。

基本的に、メッセージはバージョン1.0.105.1を認識しますが、バージョン1.0.106.0は認識しません。

手順2:Visual StudioのNuget Package for Solutionオプションで発生を手動で選択して、問題の原因となっているバージョンを削除します。

ツール> Nugetパッケージマネージャー>ソリューション用のNugetパッケージの管理...

enter image description here

手順3:Nugetコマンドラインを使用して、システムが理解するSQLiteのバージョンをインストールします。

上記の例では、バージョンは1.0.105.1です

ツール> Nugetパッケージマネージャー>パッケージマネージャーコンソール

enter image description here

これに必要なコマンドは次のようになります。

Install-Package System.Data.SQLite -Version 1.0.105.1 
Install-Package System.Data.SQLite.Core -Version 1.0.105.1 
Install-Package System.Data.SQLite.EF6 -Version 1.0.105.1

パッケージのインストール中に権限の問題が発生したため、このエラーが発生しました。管理者としてvs2013を実行して解決しました。

そう:

  1. パッケージを展開する
  2. クローズvs2013
  3. 管理者として再度実行する(重要)
  4. nugetpackageを再度インストールします

最後に、私はプロバイダーでこれを広告します(他のユーザーによって提案されたように):

  <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
1
Paolo Sanchi