mikeo_410


LINQ to SQL クラスの自動生成

  なぜこんなことになっているのかわかりませんが SQL Server 接続以外のデータベースは、何か工夫をしないと使えないようになっているようです。

1.mdb、accdb

  有用な情報が見つかりませんでした。

2.SQL Server Compact

  sqlmetal 言うコマンドラインツールがあり、これを使うらしい。
  Visual Studio の外部ツールに組み込む、SQL Metal OSUI を使ってdbml を生成できました。
  (文字の大きいWindows7だと、「Next Step」のボタンが隠れしまいますが。)

3.DBLinq(DBMetal)

  Oracle, PostgreSQL, MySQL, Ingres, SQLite などのための、sqlmetal と言うことらしい。
  SQLite のデータベースで試してみました。

  1. dbmetal /namespace:WpfApplication3 /provider:SQLite "/conn:Data Source=lumad.db" /code:LumadTest1.cs
  2. dbmetal /namespace:WpfApplication3 /provider:SQLite "/conn:Data Source=lumad.db" /dbml:LumadTest1.dbml

  のようなコマンドで、cs、dbmlファイルを作れます。
  これを、Visual Studio でプロジェクトに追加します。dbmlを追加すると、csも追加され、.dbml.layoutファイルが生成されました。

  ただし、コンパイルできません。
  生成された cs に含まれるプロパティに型が抜けています。
  おそらく、SQLite のデータベースには型がないので、そのままなのでしょう。

4.dbml の要点

  ここまで見てきて、dbmlが何か少しわかってきました。

4.1.dbmlファイル

  XML形式で、テーブルと、そのフィールドの情報が書かれている。
  Visual Studio は、dbmlファイルの追加を行うと、csファイル、dbml.layoutファイルを生成する。

4.2.DataContext クラス

  データベースのアクセスのためにデータセットに対応した DataContext クラスが作られる。
  このクラスは、System.Data.Linq.DataContext を継承している。
  ここに実装されるのは、コンストラクタとテーブルにアクセスするプロパティ。

4.3.テーブル・クラス

  テーブルに対応して、テーブル名のクラスが定義される。
  内容は、フィールドをプロパティとして宣言したもの。
  このクラスは、INotifyPropertyChanging, INotifyPropertyChanged インタフェースを実装し、プロパティが set されるときに外部へ通知することができるようになっている。

5.XSD は必要か

  通常は、前もってデータソースの追加の操作を行うので、XSDが作られている。
  dbmlファイルをプロジェクトに追加した場合は、XSD の無い状態ができるが、問題ないようだ。
  SQL Server 接続のデータベースの dbml ファイルだけを新しいプロジェクトにコピーする。
  dbml ファイル中の SettingsObjectName を新しいプロジェクトのものに変更する。
  プロジェクトに追加する。
  テスト用の検索を書いて実行して見た。


mikeo_410@hotmail.com