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

Pocket

この記事は、(この記事が初公開された日を基準にして) 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 パッケージは、以下の通りだ。 (順番は、ダウンロード数順)

  • [cci]System.Data.SQLite.Core[/cci] (System.Data.SQLite Core (x86/x64))
  • [cci]System.Data.SQLite[/cci] (System.Data.SQLite (x86/x64))
  • [cci]System.Data.SQLite.EF6[/cci] (System.Data.SQLite EF6)
  • [cci]System.Data.SQLite.Linq[/cci] (System.Data.SQLite LINQ)
  • [cci]System.Data.SQLite.x64[/cci]
  • [cci]System.Data.SQLite.x86[/cci]
  • [cci]System.Data.SQLite.MSIL[/cci] (System.Data.SQLite (MSIL))
  • [cci]System.Data.SQLite.Core.MSIL[/cci] (System.Data.SQLite Core (MSIL))

FAQ の 「Are NuGet packages available?」 に書かれているが、 上記のうち [cci]System.Data.SQLite.x86[/cci], [cci]System.Data.SQLite.x64[/cci] の 2つ については、後方互換で用意しているだけなので 新しいプロジェクトでは使うべきではない、 と書かれている。
[cci]System.Data.SQLite (MSIL)[/cci] も上記 2つ と同様に後方互換と書かれているが、 後述するように役には立つので候補からは外さないでおこう。

ということで、ダウンロード候補となるのは、以下の6つだ。

  • [cci]System.Data.SQLite[/cci] (System.Data.SQLite (x86/x64))
  • [cci]System.Data.SQLite.MSIL[/cci] (System.Data.SQLite (MSIL))
  • [cci]System.Data.SQLite.Core[/cci] (System.Data.SQLite Core (x86/x64))
  • [cci]System.Data.SQLite.Core.MSIL[/cci] (System.Data.SQLite Core (MSIL))
  • [cci]System.Data.SQLite.EF6[/cci] (System.Data.SQLite EF6)
  • [cci]System.Data.SQLite.Linq[/cci] (System.Data.SQLite LINQ)

ちなみに、これらはすべて 「System.Data.SQLite でどれをインストールするべきか」 の記事で言う、 非bundle版 となっている。

それぞれの NuGet パッケージの内容

  • [cci]System.Data.SQLite.Core[/cci], [cci]System.Data.SQLite.Core.MSIL[/cci]

System.Data.SQLite の根幹となるパッケージで、 ADO.NET プロバイダーが入っている。

[cci]System.Data.SQLite.Core[/cci] には、 x86, x64 両方の SQLite のデータベースエンジンである、 アンマネージ アセンブリ (native interop assembly) が含まれているので、 Windows であればそのまま使うことができる。

[cci]System.Data.SQLite.Core.MSIL[/cci] には SQLite のデータベースエンジン が入っていないので、 CPU のプロセッサアーキテクチャに合わせた SQLite データベースエンジンとして [cci]SQLite.Interop.dll[/cci] を別途用意しないと動作しない。

後者は、 x86/x64 Windows 以外のシステムで利用するものと考えると良いようだ。
ただ、詳しく調べていないので、あまり深くは言及しない。

  • [cci]System.Data.SQLite.EF6[/cci]

Entity Framework 6 をサポートするための機能だけが含まれている。

EntityFramework (6.0 以上) の NuGet パッケージに依存してるので、 NuGet パッケージマネージャからインストールを行うと、 これも自動的にインストールされる。

これだけをインストールしても、 ADO.NET プロバイダーも SQLite データベースエンジン も含まれていないので、使うことができない。

  • [cci]System.Data.SQLite.Linq[/cci]

LINQ をサポートするための機能だけが含まれている。

これだけをインストールしても、 ADO.NET プロバイダーも SQLite データベースエンジン も含まれていないので、使うことができない。

  • [cci]System.Data.SQLite[/cci], [cci]System.Data.SQLite.MSIL[/cci]

このパッケージには何も含まれていない

ただ、 前者は [cci]System.Data.SQLite.Core[/cci] + [cci]System.Data.SQLite.Linq[/cci] + [cci]System.Data.SQLite.EF6[/cci]、 後者は [cci]System.Data.SQLite.Core.MSIL[/cci] + [cci]System.Data.SQLite.Linq[/cci] + [cci]System.Data.SQLite.EF6[/cci] の、それぞれのパッケージに依存してるので、 NuGet パッケージマネージャからインストールを行うと、 これらも自動的にインストールされる。

[cci]Install-Package System.Data.SQLite[/cci] とだけ パッケージマネージャーコンソール で実行すれば、 Entity Framework 6 を使うための機能が一通りそろう、 All in One のパッケージとなっているわけだ。

つまり、どれをダウンロードすべきか?

まとめると、以下のような組み合わせでパッケージをインストールすれば良い。

同梱の SQLite ネイティブアセンブリ(x86/x64)を使う SQLite ネイティブアセンブリは別途用意
EntityFramework を使う [cci]System.Data.SQLite[/cci] [cci]System.Data.SQLite.MSIL[/cci]
ADO.NET Provider と LINQ だけ使う [cci]System.Data.SQLite.Core[/cci] + [cci]System.Data.SQLite.Linq[/cci] [cci]System.Data.SQLite.Core.MSIL[/cci] + [cci]System.Data.SQLite.Linq[/cci]
ADO.NET Provider だけ使う [cci]System.Data.SQLite.Core[/cci] [cci]System.Data.SQLite.Core.MSIL[/cci]

これで、 SQLite を使って Entity Framework 6 を利用できるようになるはずだ。

筆者は ASP.NET と Entity Framework を使った Web システムを作成した際に、

の本が大いに役立ったので、ついでに紹介しておく。

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

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

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください