ADO.NET Entity FrameworkとLINQ

ThinkITの「LINQとADO.NET Entity Framework」を読んでのメモ

  1. トランザクションスクリプト
    • やりたい処理を書く
  2. テーブルモジュール
    • テーブルの全データを表すクラスを作る
    • (型無し/型有り)DataSetの非接続更新を最大限に利用
  3. ドメインモデル
    • オブジェクトで考える。1レコードを表すクラスを作る
    • テーブルと切り離すためO/Rマッパーを使う
  4. ADO.NET Entity Framework
    • VS2008の追加する形で2008年前半に登場予定
    • Entity Data Model
    • O/Rマッパーではない
    • 論理データベース設計の上位として「概念レベル」を定める
      • 論理レベル・・・テーブル
        • ストアスキーマ定義言語(SSDL:Store Schema Definition Language)
      • マッピング・・・エンティティとテーブルの関連ずけ
      • 概念レベル・・・エンティティ
        • 概念スキーマ定義言語(CSDL:Conceptual Schema Definition Language)
    • テーブルは2つだけど、エンティティは1つみたいな定義ができる
    • 言語埋め込みクエリー技術
    1. オブジェクトに対するクエリ
    2. XMLに対するクエリ
    3. RDBに対するクエリ
      • LINQ To SQL(DBに)
      • LINQ To DataSets(インメモリDBに)
      • LINQ TO Entities(Entity Data Modelに)
    • 言語拡張(ダブルクォーテーションで囲むSQLとは違う)
      • C#プログラムのコードにクエリを書く
      • クエリにインテリセンスが利く
        • LINQ To SQLで、インテリセンスが利くのは、あらかじめテーブル情報(dbmlファイル)を作成しているため
      • パラメータに型が利く
      • 取得したデータの固まりにインテリセンスが利く
        • 取得したデータの固まりにはvarという型を使う(クエリによって変わる型推論用)
    • 実行タイミングには注意が必要(遅延実行)
    • 階層関係
      1. データベース
      2. ↑Entity Framework(論理:テーブル)
      3. ↑Entity Framework(マッピング)
      4. ↑Entity Framework(概念エンティティ:Entity Data Model:EDM)
      5. ↑Entity Client
      6. ↑Entity SQL
      7. ↑Object Services
      8. LINQ to Entites
    • Entity Data Model
      • VS2008、ADO.NET Entity Framework、ADO.NET Entity Framework Toolを使う
      • ウィザードからedmxファイル(Entity Data Model)を生成
      • デザイナもしくはXMLを編集して、テーブル、マッピング、エンティティ設定ができる
    • Entity Client
      • ADO.NETに似たプログラミング方式で、Entity Data Modelにアクセス
      • Transaction-SQLではなく、Entity-SQLを使う
        • Entity-SQLは文字列で記述(インテリセンスは利かない)
    • Object Services
      • LINQ to Entityを使ってEntity Data Modelにアクセス
        • インテリセンスが利く
        • データの追加・更新・削除が可能
        • Entity Clientを内部的に使う


Entity Data Model面白そうですね。1つのテーブルを複数のクラスにマッピングして、継承関係をマッピングすることもできると思います。

その他参考。