次のプロジェクトで Entity Framework 4.1 を使用する予定ですが、適切な方法を見つけるのに苦労しています。要するに、エンティティが Web サービスを通過する多層アプリケーションを構築し、できるだけきれいに保つために、自己追跡エンティティではなく POCO を使用したいと考えています。また、エンティティのベースとして使用される SQL 2008 データベースが既に存在します。
私がこれまでに読んだことから (特にhttp://msdn.microsoft.com/nl-nl/magazine/hh148150%28en-us%29.aspxに関する Julie Lerman の記事から)、次のように思われます。
- Database First アプローチを使用すると、モデルを編集するための美しい .edmx が得られますが、常に POCO ではなく永続性を認識するオブジェクトになってしまい、私の状況では役に立ちません。
- Code First アプローチを使用する場合、「ADO.NET DbContext ジェネレーター」は部分的にしか役に立ちません。.edmx からエンティティを生成しますが、外部キーとカーディナリティを正しく取得するために必要なコードは生成しません。これは、コードがそのままでは機能しないことを意味します (- edit、not true、以下の私の投稿を参照してください
-)。
- a)POCOでデータ注釈を使用します。これは、POCOをデータベース情報で汚染し、EntityFrameworkアセンブリへの依存関係も作成するため、醜いものです。
- b) DbContext.OnModelCreating に渡された DbModelBuilder を使用して、正しい外部キー、マッピングなどの情報 (つまり、「流れるような」API) を設定します。また、API は「流れるような」ものかもしれませんが、既存のデータベースと一致するようにこのすべての情報を正しく設定することは依然としてかなり困難です (そしておそらく保守不可能です) ( http://sessionfactory.blogspot.com/2011/04/conventionsを参照)。 -in-entity-framework-41.htmlのいくつかの例)。
「DbModelBuilder-way」が非常に多くの労力を必要とする理由は、それが逆に使用されるように設計されているためだと私は認識しています.それらは(うまくいけば)既存のデータベースと一致します。ただし、「DbModelBuilder の方法」は、最終的に最良の結果を生み出すように思えます。つまり、データベース メタデータを含まない純粋な POCO です。
さて、これをすべて言ったので、私の質問は次のとおりです。外部キー、列マッピング、およびその他の情報を流暢な API を介して手動で指定する必要がないように
、.edmx を DbModelBuilder にロードする方法を知っている人はいますか? ?
データベース ファーストのシナリオのようにマッピングを視覚的に編集でき、必要なすべてのメタデータが DbModelBuilder に格納されているため、きれいな POCO を取得できるため、これが両方の長所になると思います。