| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「ADO.Net Entity Framework」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
1行目: 1行目:
==ADO.Net Entity Framework==
+
==[[ADO.Net Entity Framework]]==
 
[[SQL Server]] | [[SQL Server Compact]] |  
 
[[SQL Server]] | [[SQL Server Compact]] |  
 
http://msdn.microsoft.com/ja-jp/library/bb399567.aspx
 
http://msdn.microsoft.com/ja-jp/library/bb399567.aspx
 
===概要===
 
===概要===
 
*データ指向のソフトウェア アプリケーションの開発をサポート
 
*データ指向のソフトウェア アプリケーションの開発をサポート
*.NET Framework のコンポーネント
+
*[[.NET]] Framework のコンポーネント
*.NET Framework 3.5 Service Pack 1 (SP1) で実行可能
+
*[[.NET]] Framework 3.5 Service Pack 1 (SP1) で実行可能
  
 
====アプリケーション開発では、2 つの大きく異なる目的を達成する必要====
 
====アプリケーション開発では、2 つの大きく異なる目的を達成する必要====
#エンティティ、リレーションシップ、およびロジックをモデル化
+
#エンティティ、リレーションシップ、および[[ロジック]]をモデル化
 
#データの格納と取得に使用するデータ エンジンに取り組む
 
#データの格納と取得に使用するデータ エンジンに取り組む
  
16行目: 16行目:
  
 
====データ モデリングの従来の一般的手法====
 
====データ モデリングの従来の一般的手法====
*概念モデル、論理モデル、および物理モデルの 3 つに分割
+
*[[概念]]モデル、論理モデル、および物理モデルの 3 つに分割
*概念モデルは通常、アプリケーションの要件を収集して伝えるためのツールとして使用され、プロジェクトの初期段階でのみ考慮および検討され、その後ほとんど使用されない
+
*[[概念]]モデルは通常、アプリケーションの要件を収集して伝えるためのツールとして使用され、プロジェクトの初期段階でのみ考慮および検討され、その後ほとんど使用されない
  
 
====エンティティ データ モデル (EDM)====
 
====エンティティ データ モデル (EDM)====
*開発者が概念モデル内のエンティティとリレーションシップに対してクエリを実行し、エンティティ フレームワーク がこのような操作をデータ ソース固有のコマンドに変換という形で、概念モデルを活用
+
*開発者が[[概念]]モデル内のエンティティとリレーションシップに対してクエリを実行し、エンティティ フレームワーク がこのような操作をデータ ソース固有のコマンドに変換という形で、[[概念]]モデルを活用
 
*特定のデータ ソースへの依存関係をアプリケーションにハードコーディングしなくても済む
 
*特定のデータ ソースへの依存関係をアプリケーションにハードコーディングしなくても済む
*概念モデル、ストレージ モデル、および 2 つのモデル間のマッピングは、エンティティ データ モデル (EDM) と呼ばれる外部仕様で表現
+
*[[概念]]モデル、ストレージ モデル、および 2 つのモデル間のマッピングは、エンティティ データ モデル (EDM) と呼ばれる外部仕様で表現
  
 
=====3 つのモデル ファイルとマッピング ファイルで定義=====
 
=====3 つのモデル ファイルとマッピング ファイルで定義=====
29行目: 29行目:
 
!内容
 
!内容
 
|-
 
|-
|概念スキーマ定義言語ファイル (.csdl)
+
|概念スキーマ定義[[言語]]ファイル (.csdl)
 
|概念モデル
 
|概念モデル
 
|-
 
|-
|ストア スキーマ定義言語ファイル (.ssdl)
+
|ストア スキーマ定義[[言語]]ファイル (.ssdl)
 
|ストレージ モデル (論理モデルとも呼ばれる) を定義
 
|ストレージ モデル (論理モデルとも呼ばれる) を定義
 
|-
 
|-
|マッピング スキーマ言語ファイル (.msl)
+
|マッピング スキーマ[[言語]]ファイル (.msl)
 
|ストレージ モデルと概念モデルの間のマッピングを定義
 
|ストレージ モデルと概念モデルの間のマッピングを定義
 
|-
 
|-
41行目: 41行目:
  
 
====インピーダンスミスマッチ====
 
====インピーダンスミスマッチ====
=====単なるO/Rマッピング ソリューションではない=====
+
=====単なるO/[[R]]マッピング ソリューションではない=====
 
*既存のソリューションでは、オブジェクト指向のクラスやプロパティをリレーショナル テーブルやリレーショナル列にマップするだけ
 
*既存のソリューションでは、オブジェクト指向のクラスやプロパティをリレーショナル テーブルやリレーショナル列にマップするだけ
*エンティティ フレームワーク では、論理モデルのリレーショナル テーブル、列、および外部キー制約を概念モデルのエンティティとリレーションシップにマップすることで、柔軟にオブジェクトを定義して論理モデルを最適化
+
*エンティティ フレームワーク では、論理モデルのリレーショナル テーブル、列、および外部キー制約を[[概念]]モデルのエンティティとリレーションシップにマップすることで、柔軟にオブジェクトを定義して論理モデルを最適化
 
=====基本動作=====
 
=====基本動作=====
*概念モデルのエンティティとリレーションシップとして表されるデータにアプリケーションからアクセスして変更できるようにする
+
*[[概念]]モデルのエンティティとリレーションシップとして表されるデータにアプリケーションからアクセスして変更できるようにする
*Object Services は EDM を使用して、概念モデルで表されるエンティティ型に対するオブジェクト クエリをデータ ソース固有のクエリに変換
+
*Object Ser[[vi]]ces は EDM を使用して、概念モデルで表されるエンティティ型に対するオブジェクト クエリをデータ ソース固有のクエリに変換
*クエリ結果は、Object Services によって管理されるオブジェクトに具体化
+
*クエリ結果は、Object Ser[[vi]]ces によって管理されるオブジェクトに具体化
 
====拡張可能なデータ クラス====
 
====拡張可能なデータ クラス====
*エンティティ データ モデル ツールでは、概念モデルに基づく拡張可能なデータ クラスが生成される
+
*エンティティ データ モデル ツールでは、[[概念]]モデルに基づく拡張可能なデータ クラスが生成される
 
*クラスは、開発者が追加するメンバで拡張できる部分クラス。
 
*クラスは、開発者が追加するメンバで拡張できる部分クラス。
 
*特定の概念モデルに対して生成されるクラスは、エンティティをオブジェクトとして具体化したり変更を追跡して保存したりするための [http://msdn.microsoft.com/ja-jp/library/bb386871.aspx Object Services] を提供する基本クラスから派生。
 
*特定の概念モデルに対して生成されるクラスは、エンティティをオブジェクトとして具体化したり変更を追跡して保存したりするための [http://msdn.microsoft.com/ja-jp/library/bb386871.aspx Object Services] を提供する基本クラスから派生。
71行目: 71行目:
  
 
====[http://msdn.microsoft.com/ja-jp/library/bb738695.aspx オブジェクトの追加、変更、および削除]====
 
====[http://msdn.microsoft.com/ja-jp/library/bb738695.aspx オブジェクトの追加、変更、および削除]====
*概念モデルのエンティティ コンテナを表す ObjectContext から派生したクラスを生成し、このオブジェクト コンテキストは、変更の追跡や ID、同時実行、およびリレーションシップの管理などの機能を提供する
+
*[[概念]]モデルのエンティティ コンテナを表す ObjectContext から派生したクラスを生成し、このオブジェクト コンテキストは、変更の追跡や ID、同時実行、およびリレーションシップの管理などの機能を提供する
 
*このクラスは、データ ソースに挿入、更新、および削除を書き込む SaveChanges メソッドも公開
 
*このクラスは、データ ソースに挿入、更新、および削除を書き込む SaveChanges メソッドも公開
 
*このような変更は、クエリと同様に、システムによって自動的に生成されるコマンドで行うことも、特定のストアド プロシージャを使用するように指定することも可能
 
*このような変更は、クエリと同様に、システムによって自動的に生成されるコマンドで行うことも、特定のストアド プロシージャを使用するように指定することも可能
80行目: 80行目:
  
 
====エンティティ データ モデル (EDM)====
 
====エンティティ データ モデル (EDM)====
*プログラミング言語やリレーショナル データベースの構造による制約を受けない中立的な形式でデータが定義される
+
*プログラミング[[言語]]やリレーショナル データベースの構造による制約を受けない中立的な形式でデータが定義される
 
*エンティティおよびリレーションシップの詳細を指定したり、それらをデータ構造として実装したりする際に使用
 
*エンティティおよびリレーションシップの詳細を指定したり、それらをデータ構造として実装したりする際に使用
 
====2 つの基本的な型====
 
====2 つの基本的な型====

2020年2月16日 (日) 04:21時点における最新版

ADO.Net Entity Framework

SQL Server | SQL Server Compact | http://msdn.microsoft.com/ja-jp/library/bb399567.aspx

概要

  • データ指向のソフトウェア アプリケーションの開発をサポート
  • .NET Framework のコンポーネント
  • .NET Framework 3.5 Service Pack 1 (SP1) で実行可能

アプリケーション開発では、2 つの大きく異なる目的を達成する必要

  1. エンティティ、リレーションシップ、およびロジックをモデル化
  2. データの格納と取得に使用するデータ エンジンに取り組む

エンティティ フレームワーク を使用

  • 開発者は、顧客や顧客の住所など、ドメイン固有のオブジェクトおよびプロパティの形式でデータを扱うことができる。
  • データが格納されている、基になるデータベース テーブルや列を意識する必要がない

データ モデリングの従来の一般的手法

  • 概念モデル、論理モデル、および物理モデルの 3 つに分割
  • 概念モデルは通常、アプリケーションの要件を収集して伝えるためのツールとして使用され、プロジェクトの初期段階でのみ考慮および検討され、その後ほとんど使用されない

エンティティ データ モデル (EDM)

  • 開発者が概念モデル内のエンティティとリレーションシップに対してクエリを実行し、エンティティ フレームワーク がこのような操作をデータ ソース固有のコマンドに変換という形で、概念モデルを活用
  • 特定のデータ ソースへの依存関係をアプリケーションにハードコーディングしなくても済む
  • 概念モデル、ストレージ モデル、および 2 つのモデル間のマッピングは、エンティティ データ モデル (EDM) と呼ばれる外部仕様で表現
3 つのモデル ファイルとマッピング ファイルで定義
ファイル 内容
概念スキーマ定義言語ファイル (.csdl) 概念モデル
ストア スキーマ定義言語ファイル (.ssdl) ストレージ モデル (論理モデルとも呼ばれる) を定義
マッピング スキーマ言語ファイル (.msl) ストレージ モデルと概念モデルの間のマッピングを定義

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

単なるO/Rマッピング ソリューションではない
  • 既存のソリューションでは、オブジェクト指向のクラスやプロパティをリレーショナル テーブルやリレーショナル列にマップするだけ
  • エンティティ フレームワーク では、論理モデルのリレーショナル テーブル、列、および外部キー制約を概念モデルのエンティティとリレーションシップにマップすることで、柔軟にオブジェクトを定義して論理モデルを最適化
基本動作
  • 概念モデルのエンティティとリレーションシップとして表されるデータにアプリケーションからアクセスして変更できるようにする
  • Object Services は EDM を使用して、概念モデルで表されるエンティティ型に対するオブジェクト クエリをデータ ソース固有のクエリに変換
  • クエリ結果は、Object Services によって管理されるオブジェクトに具体化

拡張可能なデータ クラス

  • エンティティ データ モデル ツールでは、概念モデルに基づく拡張可能なデータ クラスが生成される
  • クラスは、開発者が追加するメンバで拡張できる部分クラス。
  • 特定の概念モデルに対して生成されるクラスは、エンティティをオブジェクトとして具体化したり変更を追跡して保存したりするための Object Services を提供する基本クラスから派生。
  • 開発者は、このようなクラスを使用して、エンティティとリレーションシップをナビゲーション プロパティによって関連付けられたオブジェクトとして扱うことができる。

EDM に対してクエリを実行してオブジェクトを返す方法

方法 内容
LINQ to Entities 概念モデルで定義されているエンティティ型に対してクエリを実行するための統合言語クエリ (LINQ) のサポートを提供
Entity SQL 概念モデルのエンティティを直接操作し、継承やリレーションシップなどの EDM 機能をサポートする、ストレージの影響を受けない SQL。オブジェクト クエリと EntityClient プロバイダを使用して実行されるクエリの両方で使用
クエリ ビルダ メソッド LINQ スタイルのクエリ メソッドを使用して Entity SQL クエリを構築

オブジェクトの追加、変更、および削除

  • 概念モデルのエンティティ コンテナを表す ObjectContext から派生したクラスを生成し、このオブジェクト コンテキストは、変更の追跡や ID、同時実行、およびリレーションシップの管理などの機能を提供する
  • このクラスは、データ ソースに挿入、更新、および削除を書き込む SaveChanges メソッドも公開
  • このような変更は、クエリと同様に、システムによって自動的に生成されるコマンドで行うことも、特定のストアド プロシージャを使用するように指定することも可能

シナリオ

Entity Framework のデータ モデリング

エンティティ データ モデル (EDM)

  • プログラミング言語やリレーショナル データベースの構造による制約を受けない中立的な形式でデータが定義される
  • エンティティおよびリレーションシップの詳細を指定したり、それらをデータ構造として実装したりする際に使用

2 つの基本的な型

内容
EntityType アプリケーション ドメインのデータ構造詳細の抽象的な仕様
AssociationType 型と型の論理的な関係