System.Data.SQLite の NuGet パッケージ のうち どれをインストールするべきか


この記事は、(この記事が初公開された日を基準にして) 4年前に投稿された

の記事のフォロー記事だ。

Visual Studio 2012 に標準で含まれて以降、 NuGet を使ってライブラリパッケージをインストールすることが標準的になった。
しかし、 System.Data.SQLite に於いては、 NuGet パッケージの方も相変わらず多くのパッケージが公開されているので、 これらについてもどれをインストールすべきか解説してみようと思う。 160620_1

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 の NuGet パッケージ のうち どれをインストールするべきか” への1件のコメント

  1. ピンバック: System.Data.SQLite でどれをインストールするべきか | Aqua Ware つぶやきブログ

コメントを残す

メールアドレスが公開されることはありません。