Open棟梁Project - マイクロソフト系技術情報 Wiki -[[戻る>データアクセスのいろいろ]] * 目次 [#s84ee5e9] #contents *概要 [#e1c8710d] .NET Framework 3.5 SP1で追加されたデータベースアクセステクノロジー~ -[[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 **DBファースト、モデルファースト [#m1aabfea] -エンタープライズではほぼ、DBファーストを採用する。 -単純なテーブル(データストア)しか使用しない~ EUCなどの世界では、モデルファーストもマッチする可能性がある。 データベース ファースト 恵みの波紋~ 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/ ***モデルファースト [#e8fd5f15] モデル(EDM)からDBMSのスキーマを生成する方法 -第2回 EDMにおける多対多関係とEntity Frameworkでのデータの取得/保存 --1.多対多関係の実現 --2.EDMからデータベースの自動生成~ http://www.atmarkit.co.jp/fdotnet/ef4basic/ef4basic02/ef4basic02_02.html --3.Entity Frameworkで自動生成されるクラス --4.Entity Frameworkでのデータ保存/取得サンプル ***DBファースト [#k0847c21] DBMSのスキーマからモデル(EDM)を生成する方法 -第4回 データベースからのEntity Data Model生成~ http://www.atmarkit.co.jp/fdotnet/ef4basic/ef4basic04/ef4basic04_01.html --1.データベースからのEDM生成 --2.ストアド・プロシージャの呼び出し --3.複合型の活用/まとめ *批判 [#j3882416] -(エンタープライズの領域では)使い難いとの批判も多い模様。 -ツール等のスタンドアロンのプログラム、情報系システムなどのEUCによるRAD開発などにはマッチする可能性もある。 **信任投票 [#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 **エンプラ領域でのミスマッチ [#x151128c] 基幹系システムでは以下の理由でミスマッチと判断されることが多い。~ ツール等のスタンドアロンのプログラム、情報系システムなどのEUCによるRAD開発では、活躍の場がある。 ***内部実装とその動作がブラックボックス [#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開発ツールに特有の、保守性の悪さがある。 *参考 [#n42d5d9a] -連載:ADO.NET Entity Framework入門 - @IT~ http://www.atmarkit.co.jp/fdotnet/ef4basic/index/index.html -.NETの新データアクセス・テクノロジ「ADO.NET Entity Framework」 - @IT~ http://www.atmarkit.co.jp/fdotnet/special/vs2008sp1ef/vs2008sp1ef_01.html -雲のごとく - 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