Open棟梁Project - マイクロソフト系技術情報 Wiki

目次

概要

.NET Framework 3.5 SP1で追加されたデータベースアクセステクノロジー

概念モデルに対してプログラミング

Entity Frameworkは、インピーダンス・ミスマッチ問題を解決するため、
エンティティを定義し、エンティティ経由でデータベースへアクセスするための手段を提供する技術。

Entity Data Model(EDM)

CSDL、SSDL、および MSL 仕様
http://msdn.microsoft.com/ja-jp/library/vstudio/bb399604.aspx

CSDL

CSDL(Conceptual Schema Definition Language:概念スキーマ定義言語)
概念スキーマ(概念モデル)

MSL

MSL(Mapping Schema Language:マッピング・スキーマ言語)
CSDLとSSDL(モデル間)のマッピング

SSDL

SSDL(Storage Schema Definition Language:ストア・スキーマ定義言語)
ストレージ・スキーマ(ストレージ モデル)

xxx ファースト

モデルファースト

モデル(EDM)からDBMSのスキーマを生成する方法

DBファースト

DBMSのスキーマからモデル(EDM)を生成する方法

コードファースト

(モデルクラスへのデータ構造の定義が、そのままデータベースのテーブル設計となる)

CRUD処理(LINQやSQLを使用しない)

ここでは、contextはDbContext?を継承したコンテキストを指している。
サンプルプログラム次第で、context, db, dbContextなどの名称が使用される。

更新系

SaveChanges?とEntity States

Entityは以下のEntity Statesを持っており、

SaveChanges?を呼び出した際に、
コレを更新系SQLに変えて実行すると言う、ある種、
RowState? + TableAdapter的な仕組みで動作している。

Insert

using (var context = new XXXXXContext())
{
    // YYYYY Entity の Statesが
    // Unchanged状態→Added状態へ。
    context.YYYYYs.Add(new YYYYY
    {
        プロパティ名1 = 値1,
        プロパティ名2 = 値2,
    });

    // SaveChanges→Added状態の
    // YYYYY EntityがInsert文に替えられる。
    context.SaveChanges();
}

参照系

foreach

using (var context = new XXXXXContext())
{
    foreach (var YYYYY in context.YYYYYs)
    {
        Console.WriteLine(product.Name);
    }
}

LINQ to Entities

LINQ to Entities, QueryBuilder?, Entity SQL

外部スキーマ云々的なトピック

JOINのサポート

JOINの使用

JOINを使用しない内部結合

集計処理のサポート

性能問題

ID指定しない

Iterator的にDBアクセス

コードファースト

マイグレーション

コードファーストのデータモデルクラスの変更をもとに、
既存のデータを残したままデータベースのテーブルを変更する機能。

批判

信任投票

エンプラ領域でのミスマッチ

基幹系システムでは以下の理由でミスマッチと判断されることが多い。

インピーダンス・ミスマッチ

スキーマ構造の変更

内部実装とその動作がブラックボックス

SQLが、LINQ to Entityのエンジンに生成される形であり、
また、内部実装とその動作がブラックボックスになっているため(※1)
それらが明確にならないと設計、チューニング、問題分析などが困難。

従って(特に日本の)エンタープライズ・アプリケーションでは敬遠されている。
これは、JavaのJava8でJPAでHibernateでJinqが敬遠されるのと≒。

参考

@IT

MSDN


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS