この記事は、(この記事が初公開された日を基準にして) 4年前に投稿された
の記事のフォロー記事だ。Visual Studio 2012 に標準で含まれて以降、 NuGet を使ってライブラリパッケージをインストールすることが標準的になった。
しかし、 System.Data.SQLite に於いては、 NuGet パッケージの方も相変わらず多くのパッケージが公開されているので、 これらについてもどれをインストールすべきか解説してみようと思う。
Entity Framework Core について書いたひとつ前の記事の
とは異なり、 こちらの記事は Full .NET で SQLite を使う場合で、 特に Entity Framework 6.x と組み合わせる際に有用な内容となっている。(残念ながら、 System.Data.SQLite は .NET Core では使えないのだ。)
公開されている NuGet パッケージ
公式の NuGet パッケージは、以下の通りだ。 (順番は、ダウンロード数順)
System.Data.SQLite.Core
(System.Data.SQLite Core (x86/x64))System.Data.SQLite
(System.Data.SQLite (x86/x64))System.Data.SQLite.EF6
(System.Data.SQLite EF6)System.Data.SQLite.Linq
(System.Data.SQLite LINQ)System.Data.SQLite.x64
System.Data.SQLite.x86
System.Data.SQLite.MSIL
(System.Data.SQLite (MSIL))System.Data.SQLite.Core.MSIL
(System.Data.SQLite Core (MSIL))
FAQ の 「Are NuGet packages available?」 に書かれているが、 上記のうち System.Data.SQLite.x86
, System.Data.SQLite.x64
の 2つ については、後方互換で用意しているだけなので 新しいプロジェクトでは使うべきではない、 と書かれている。
System.Data.SQLite (MSIL)
も上記 2つ と同様に後方互換と書かれているが、 後述するように役には立つので候補からは外さないでおこう。
ということで、ダウンロード候補となるのは、以下の6つだ。
System.Data.SQLite
(System.Data.SQLite (x86/x64))System.Data.SQLite.MSIL
(System.Data.SQLite (MSIL))System.Data.SQLite.Core
(System.Data.SQLite Core (x86/x64))System.Data.SQLite.Core.MSIL
(System.Data.SQLite Core (MSIL))System.Data.SQLite.EF6
(System.Data.SQLite EF6)System.Data.SQLite.Linq
(System.Data.SQLite LINQ)
ちなみに、これらはすべて 「System.Data.SQLite でどれをインストールするべきか」 の記事で言う、 非bundle版 となっている。
それぞれの NuGet パッケージの内容
System.Data.SQLite.Core
,System.Data.SQLite.Core.MSIL
System.Data.SQLite の根幹となるパッケージで、 ADO.NET プロバイダーが入っている。
System.Data.SQLite.Core
には、 x86, x64 両方の SQLite のデータベースエンジンである、 アンマネージ アセンブリ (native interop assembly) が含まれているので、 Windows であればそのまま使うことができる。
System.Data.SQLite.Core.MSIL
には SQLite のデータベースエンジン が入っていないので、 CPU のプロセッサアーキテクチャに合わせた SQLite データベースエンジンとして SQLite.Interop.dll
を別途用意しないと動作しない。
後者は、 x86/x64 Windows 以外のシステムで利用するものと考えると良いようだ。
ただ、詳しく調べていないので、あまり深くは言及しない。
System.Data.SQLite.EF6
Entity Framework 6 をサポートするための機能だけが含まれている。
EntityFramework (6.0 以上) の NuGet パッケージに依存してるので、 NuGet パッケージマネージャからインストールを行うと、 これも自動的にインストールされる。
これだけをインストールしても、 ADO.NET プロバイダーも SQLite データベースエンジン も含まれていないので、使うことができない。
System.Data.SQLite.Linq
LINQ をサポートするための機能だけが含まれている。
これだけをインストールしても、 ADO.NET プロバイダーも SQLite データベースエンジン も含まれていないので、使うことができない。
System.Data.SQLite
,System.Data.SQLite.MSIL
このパッケージには何も含まれていない。
ただ、 前者は System.Data.SQLite.Core
+ System.Data.SQLite.Linq
+ System.Data.SQLite.EF6
、 後者は System.Data.SQLite.Core.MSIL
+ System.Data.SQLite.Linq
+ System.Data.SQLite.EF6
の、それぞれのパッケージに依存してるので、 NuGet パッケージマネージャからインストールを行うと、 これらも自動的にインストールされる。
Install-Package System.Data.SQLite
とだけ パッケージマネージャーコンソール で実行すれば、 Entity Framework 6 を使うための機能が一通りそろう、 All in One のパッケージとなっているわけだ。
つまり、どれをダウンロードすべきか?
まとめると、以下のような組み合わせでパッケージをインストールすれば良い。
\ | 同梱の SQLite ネイティブアセンブリ(x86/x64)を使う | SQLite ネイティブアセンブリは別途用意 |
---|---|---|
EntityFramework を使う |
System.Data.SQLite
|
System.Data.SQLite.MSIL
|
ADO.NET Provider と LINQ だけ使う |
System.Data.SQLite.Core + System.Data.SQLite.Linq
|
System.Data.SQLite.Core.MSIL + System.Data.SQLite.Linq
|
ADO.NET Provider だけ使う |
System.Data.SQLite.Core
|
System.Data.SQLite.Core.MSIL
|
これで、 SQLite を使って Entity Framework 6 を利用できるようになるはずだ。
筆者は ASP.NET と Entity Framework を使った Web システムを作成した際に、
の本が大いに役立ったので、ついでに紹介しておく。
ピンバック: System.Data.SQLite でどれをインストールするべきか | Aqua Ware つぶやきブログ