[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]] -[[戻る>データアクセスのいろいろ]] * 目次 [#s84ee5e9] #contents *概要 [#e1c8710d] .NET Framework 3.5 SP1で追加されたデータベースアクセステクノロジー -Entity Frameworkは、TableAdapter と比べ、より高次の機能を提供し、高い生産性を誇る RAD ツールです。 -データアクセス部分を隠ぺいするため、データベースの種類や構造を意識することなくプログラミングできます。 -反面、実際に発行される SQL 文の構築は Entity Framework に委ねられます。 -このため、チューニングや、柔軟なデータの参照・更新が課題になりやすく、~ ミッション クリティカルなエンタープライズ システム開発には適合しないことがあります。 -[[LINQ(LINQ to Entity)>LINQ]]との関連もチェックして下さい。 **概念モデルに対してプログラミング [#g3c9b5e5] Entity Frameworkは、インピーダンス ミスマッチ問題を解決するため、~ エンティティを定義し、エンティティ経由でデータベースへアクセスするための手段を提供する技術。 -概念モデルであるEntity Data Model(EDM)を開発者が柔軟にモデリング可能。~ RDBに対して直接プログラミングする代わりに、EDMに対してプログラミングする。 --これにより、テーブルとオブジェクトを1対1に対応させるO/Rマッパとは異なり、~ 「結合(Join)」というRDB固有の事情に振り回されることなく、~ より直感的に必要な情報を取得することが可能になる。 --RDB側のスキーマ変更(特にテーブルの分割/統合のような変化)に対して耐性がある。 -EntityはADO.NET 非接続型と同様に、多階層のアプリケーションを開発する場合、~ オブジェクトとして渡すことが可能でありDTO(Data Transfer Object)として利用できる。 **Entity Data Model(EDM) [#se4e2907] CSDL、SSDL、および MSL 仕様~ http://msdn.microsoft.com/ja-jp/library/vstudio/bb399604.aspx -概念スキーマ定義言語 (CSDL)、ストア スキーマ定義言語 (SSDL)、およびマッピング仕様言語 (MSL) は ~ XML ベースの言語で、それぞれ概念モデル、ストレージ モデル、モデル間のマッピングについて記述する。 -Entity Data Model(EDM) の定義は、Entity Data Model デザイナーにより、~ 設計時にモデルとマッピングの情報を .edmx ファイルに保存する。 -Entity Data Model デザイナーは、ビルド時に .edmx ファイルの情報を使用して、~ Entity Framework が実行時に必要とする .csdl、.ssdl、および .mslファイルを作成する。 ***CSDL [#u45bdd9b] CSDL(Conceptual Schema Definition Language:概念スキーマ定義言語)~ 概念スキーマ(概念モデル) -CSDL 仕様~ http://msdn.microsoft.com/ja-jp/library/vstudio/bb399292.aspx ***MSL [#eb804616] MSL(Mapping Schema Language:マッピング・スキーマ言語)~ CSDLとSSDL(モデル間)のマッピング -MSL 仕様~ http://msdn.microsoft.com/ja-jp/library/vstudio/bb399202.aspx ***SSDL [#r9199843] SSDL(Storage Schema Definition Language:ストア・スキーマ定義言語)~ ストレージ・スキーマ(ストレージ モデル) -SSDL 仕様~ http://msdn.microsoft.com/ja-jp/library/vstudio/bb399559.aspx ** xxx ファースト [#m1aabfea] -エンタープライズではほぼ、DBファーストを採用する。 -単純なテーブル(データストア)しか使用しない~ EUCなどの世界では、モデルファーストもマッチする可能性がある。 ***モデルファースト [#e8fd5f15] モデル(EDM)からDBMSのスキーマを生成する方法 -第2回 EDMにおける多対多関係とEntity Frameworkでのデータの取得/保存~ http://www.atmarkit.co.jp/fdotnet/ef4basic/ef4basic02/ef4basic02_01.html ++多対多関係の実現 ++EDMからデータベースの自動生成~ http://www.atmarkit.co.jp/fdotnet/ef4basic/ef4basic02/ef4basic02_02.html ++Entity Frameworkで自動生成されるクラス ++Entity Frameworkでのデータ保存/取得サンプル ***DBファースト [#k0847c21] DBMSのスキーマからモデル(EDM)を生成する方法 ***コードファースト [#rcec17e4] -ADO.NET Entity Framework 4.1 で登場した機能。 -ASP.NET MVC のモデルに POCO でデータ構造を定義すると、~ その定義に従ってデータベースにテーブルが作成される。 -ソースコードのみで完結し、~ Entity Framework のEntity Data Model (EDM) などを~ 明示的に作成する必要がなくなるため、より迅速な開発が可能となる。 (モデルクラスへのデータ構造の定義が、そのままデータベースのテーブル設計となる) -第4回 データベースからのEntity Data Model生成~ http://www.atmarkit.co.jp/fdotnet/ef4basic/ef4basic04/ef4basic04_01.html ++データベースからのEDM生成 ++ストアド・プロシージャの呼び出し ++複合型の活用/まとめ **Entity Frameworkマイグレーション [#heee7759] コードファーストのデータモデルクラスの変更をもとに、~ 既存のデータを残したままデータベースのテーブルを変更する機能。 -Entity Framework Code First Migrations~ http://msdn.microsoft.com/ja-jp/data/jj591621.aspx *批判 [#j3882416] -性能と柔軟性が重視されるエンタープライズの領域では、使い難いとの批判も多い模様。 -ツール等のスタンドアロンのプログラム、情報系システムなどのEUCによるRAD開発などにはマッチする可能性もある。 -また、ADO.NETは枯れた技術であるのに対し、Entity Frameworkは進化の余地がある。 --Entity Framework の歴史を振り返る - kendik.net~ http://kendik.hatenablog.com/entry/2013/05/24/033400 --Entity Framework のバージョン履歴~ https://msdn.microsoft.com/ja-jp/data/jj574253.aspx **信任投票 [#of646cbb] -ADO .NET Entity Framework Vote of No Confidence~ http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/ -ADO.NET Entity Framework Taking Some Heat~ http://www.infoq.com/news/2008/06/entity-framework-heat -Is ORM (Linq, Hibernate...) really that useful - Stack Overflow~ http://stackoverflow.com/questions/938524/is-orm-linq-hibernate-really-that-useful -Entity Framework VS LINQ to SQL VS ADO.NET with stored procedures - Stack Overflow~ http://stackoverflow.com/questions/2698151/entity-framework-vs-linq-to-sql-vs-ado-net-with-stored-procedures -データベース ファースト 恵みの波紋~ https://ogacha.wordpress.com/tag/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9-%E3%83%95%E3%82%A1%E3%83%BC%E3%82%B9%E3%83%88/ **エンプラ領域でのミスマッチ [#x151128c] 基幹系システムでは以下の理由でミスマッチと判断されることが多い。 ***内部実装とその動作がブラックボックス [#xeeffcb0] SQLが、LINQ to Entityのエンジンに生成される形であり、~ また、内部実装とその動作がブラックボックスになっているため(※1)~ それらが明確にならないと設計、チューニング、問題分析などが困難。~ 従って(特に日本の)エンタープライズ・アプリケーションでは敬遠されている。~ これは、JavaのJava8でJPAでHibernateでJinqが敬遠されるのと≒。 -(※1)Questions about EntityFramework~ https://github.com/OpenTouryoProject/SampleProgram/issues/6 ***スキーマ構造の変更 [#g2c01a47] -DBMSのスキーマからモデル(EDM)を生成する方法を採用している場合、スキーマの構造が変わった場合、モデル(EDM)の作り直しが発生する。 -生成されたモデル(EDM)をカスタマイズしていた場合、作り直しにより、カスタマイズが破棄されてしまう可能性がある。 RAD開発ツールに特有の、保守性の悪さがある。~ (逆に言えば、カスタマイズがなければ、スキーマ構造の変更をモデル(EDM)に同期し、変更に迅速に対応できるとも言える。) *参考 [#n42d5d9a] -[[Entity Framework の調査]] -Entity Framework のお役立ち記事まとめ ある SE のつぶやき~ http://fnya.cocolog-nifty.com/blog/2014/01/entity-frame-13.html **@IT [#a721f612] -.NETの新データアクセス・テクノロジ「ADO.NET Entity Framework」 - @IT~ http://www.atmarkit.co.jp/fdotnet/special/vs2008sp1ef/vs2008sp1ef_01.html -連載:ADO.NET Entity Framework入門 - @IT~ http://www.atmarkit.co.jp/fdotnet/ef4basic/index/index.html --第1回 最新DBアクセス・フレームワークの基本的な考え方 --第2回 EDMにおける多対多関係とEntity Frameworkでのデータの取得/保存 --第3回 Entity Frameworkにおけるクエリと更新 --第4回 データベースからのEntity Data Model生成 --第5回 POCOによるエンティティ・クラス --第6回 EF4によるN層アーキテクチャと自己追跡エンティティ【前編】 --第7回 EF4によるN層アーキテクチャと自己追跡エンティティ【後編】 **MSDN [#n8565ab6] -エンティティ フレームワークの概要~ https://msdn.microsoft.com/ja-jp/library/bb399567.aspx -Entity Framework~ https://msdn.microsoft.com/ja-jp/data/ef.aspx --Entity Framework Development Workflows Video~ https://msdn.microsoft.com/ja-jp/data/jj590134 -雲のごとく - Site Home - MSDN Blogs~ --.NET Framework 4.5 におけるデータ アクセスの概要 その1~ http://blogs.msdn.com/b/daisukei/archive/2014/07/29/net-framework-4-5.aspx --.NET Framework 4.5 におけるデータ アクセスの概要 その 3 ~ ADO.NET Entity Framework~ http://blogs.msdn.com/b/daisukei/archive/2014/08/29/net-framework-4-5-3-ado-net-entity-framework.aspx --ADO.NET Entity Framework ---http://www.slideshare.net/daisukei/daisukei-ef/11 ---http://www.slideshare.net/daisukei/daisukei-ef/38