proglog

主にプログラミングに関する断片的メモ

[devel][c#][db] sqliteでC#のLINQ

とりあえず、うまくいったっぽい。

忘れそうなのでいったんメモ

環境

今回は、データベースファイルは既存のもの。

下準備

  1. exeのインストーラのタイプをDL
  2. インストールディレクトリは適当に
  3. 途中、Visual C# 2008にデザイナをインストールするオプションをちゃんとチェックする
  4. (インストールディレクトリ)\binから、プロジェクトのディレクトリに、System.Data.SQLite.dllSystem.Data.SQLite.dllをコピー。
  5. プロジェクトの参照設定からこの二つを追加
  6. ソースにusing System.Data.SQLite;を追加

設定

ここで大事なことは、

Oh I didn't notice this ... Linq to SQL is for Sql Server only. You want Linq to Entities, or the Entity Framework model.

Robert

http://sqlite.phxsoftware.com/forums/p/1408/6101.aspx#6101

ということで、O/Rマッピング段階で、LINQ to SQLクラスは使わない
そうではなくて、ADO.NET Entity Data Modelを使う、ということ。

これを使う手順は、Visual Studio で LINQ to Entities プロジェクトを作成する方法に従う。

セクションAdventureWorks Sales Model を作成および参照するには
  • 手順3の「名前」ボックスは適当に
  • 手順5の「データ接続の選択」で
    1. 「新しい接続」から「接続のプロパティー」ダイアログで
    2. データソース「変更」から「データソースの変更」ダイアログで「SQLite Database File」を選択。データプロバイダはデフォルトでSQLiteのものになるのでそのまま。
    3. 「接続のプロパティー」ダイアログで、Databaseを、あらかじめ用意したファイルに。
    4. 念の為にテスト接続
    5. で、OK。

ここからおかしなエラーが時々出る

オブジェクト参照がオブジェクト インスタンスに設定されていません

が、気にしない。

なんどかやってると消える。

そのうちまた時々出てくるけど、そのたびに何度か同じことをすればよくなる。

不思議。

後は適当に手順を最後まで進める。

使う

ソリューションエクスプローラーで(付けた名前).edmx配下の(付けた名前)Designer.csファイルが、マッピングされたオブジェクトのためのクラス定義っぽい。

で、ここのnamespaceをusingして、クラスをdbとしてnewする感じでChapter17 LINQ to SQL @ITのリスト17.1 LINQ to SQLによるデータベースの検索を書き換えてビルド。


そう、なぜか今、C#をやり始めてる。