C#とEntity FrameworkでSQLiteを使う(Entity Framework実践編)

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
sqlite-logo-with-vs

ADO.NET Entity Frameworkを使って、SQLiteにアクセスできるよう設定する手順を紹介します。

.NETからSQLiteのアクセスに必要なライブラリであるSystem.Data.SQLiteのインストールは C#とEntity FrameworkでSQLiteを使う(System.Data.SQLiteインストール編) をご覧ください。

これによって、O/Rマッピングが行なわれ、SQL文を一切記述することなくSQLiteの読み書きができるようになります。

スポンサーリンク

Entity Data Modelの追加

Visual Studioでプロジェクトを起動し、プロジェクトエクスプローラーのプロジェクト名を右クリックして[追加]→[新しい項目]を選びます。

新しい項目の追加

[新しい項目の追加]ウィンドウが開いたら、 “ADO.NET Entity Data Model” を選択し、適当な名前をつけて[追加]をクリックします。

ADO.NET Entity Data Model を選択

モデルのコンテンツの選択

[Entity Data Mode ウィザード]が開くので、[データベースから生成]を選び、[次へ >]をクリックします。

データベースから生成 を選ぶ

データ接続の選択

まず、[新しい接続]をクリックします。

新しい接続 をクリック

[接続のプロパティ]ダイアログが開くので、[変更]ボタンをクリックします。

変更 ボタンをクリック

[データソースの変更]画面で “System.Data.SQLite Database File” を選び、[OK]をクリックします。選べない場合は 32bit版 System.Data.SQLiteのインストール からやり直しましょう。

System.Data.SQLite Database File を選ぶ

[接続のプロパティ]画面で、[Browse]を押して、SQLiteのデータベースファイルを選択します。(新しいデータベースを作る場合は[New…]でできるようです。)

その他、特に変更するところがなければ[テスト接続]を押してみて、問題がないようなら[OK]を押して閉じます。

データベースファイルを選ぶ

ウィザードに戻ると[エンティティ接続文字列]が設定されているはずなので、確認します。

接続文字列を確認する

[エンティティ接続設定に名前を付けて App.Config に保存]にチェックを入れ、[次へ >]をクリックします。

データベースオブジェクトの選択

プログラムから扱う必要のあるテーブルやビューなどにチェックを入れます。リレーションしているテーブルがあれば、それらも忘れずに選択します。

テーブルやビューなどを選択

テーブル名などに適正な英語の名前をつけている場合は[生成されたオブジェクトの名前を複数可または単数化する]にチェックをいれておくとよいでしょう。テーブルに対応するクラスの名前が単数形になったり、リレーション先のデータを複数もっている場合などは複数形のプロパティ名になったりします。

モデル名前空間はデータベースの名前としてわかりやすい名前に +”Model”をつけておけばOKです。

これでオプションの入力は終わりなので[完了]をクリックしてウィザードを閉じます。

設定完了

ウィザードを閉じると、▼のようなモデル図が開き、リレーションの関係をわかりやすく表示してくれます。

*.edmxファイルを開くとモデルを表示してくれる

必要なテーブルと列名がそろっていることを確認してください。

Entity Frameworkで使う

ここまででEntity FrameworkでSQLiteのデータを取得する準備は完了です。

あとは、下記のように <データベース名>Entities をインスタンス化して、データをごにょごにょしましょう。

ちなみにこのエンティティコンテナーの名前を確認するには .edmx ファイルを開き、何も選択しない状態にすると、プロパティウィンドウの “エンティティコンテナー名” に表示されます。

エンティティコンテナー名の確認

トラブルシューティング

SQLiteをEntity Frameworkで使うにあたって遭遇した例外をメモしておきます。

混合モード アセンブリはバージョン ‘v2.0.50727′ のランタイムに対して作成されており、追加の構成情報がないと 4.0 ランタイムでは読み込めません。

この例外、.NET Framework 4.0のプロジェクトで旧バージョンのFramework用DLLを読み込んだときに起こります。
(おそらくSystem.Data.SQLiteでは1.0.66.0などのレガシーバージョンをインストールしたときのみ起こると思います。)

これに関しては、プロジェクトのapp.configを開き(なければ作る)、<startup>タグの部分にuseLegacyV2RuntimeActivationPolicy属性を追加し、下記のようにします。

これでビルドすればおそらく解消されるはずです。

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存