Entity Framework 4 / POCO-どこから始めますか?[閉まっている]


183

私はしばらくプログラミングをしていて、以前にLINQ-To-SQLおよびLINQ-To-Entitiesを使用していました(ただし、エンティティを使用する場合は、エンティティ/テーブル1-1の関係にあります。つまり、L2SQLとそれほど変わりません)。

私は、制御の反転、作業単位、POCO、およびリポジトリー・パターンについて多くの読書をしてきましたが、この方法論を新しいアプリケーションで使用したいと考えています。

私が苦労しているのは、EF1の知識を前提としない、EF4の明確で簡潔な初心者向けガイドを見つけることです。

私が答える必要がある具体的な質問は次のとおりです。

最初にコード/モデルを最初に?EF4に関する長所/短所(つまり、最初にコードを実行し、後でコードを変更し、DBモデルを再生成する必要がある場合はどうなりますか?データは保持され、変換または削除されますか?)

私がコードファーストになると仮定して(EF4がそれをDBスキーマに変換する方法を確認したいのですが)、実際にどのように開始しますか?エンティティダイアグラムに「これがエンティティモデルなので、次に移動します...」という記事をよく目にします-残念ながら、デザイナーでモデルを作成して保存したかどうかは不明ですコードを生成し、それ以降の自動コード生成を停止しました-または-コード化しました(POCO)?クラスとどういうわけかそれらをdeisgnerビューにインポートしましたか?

私が本当に必要なのは、「魔法」がどこから来ているのか、そしてDBから直接EFモデルを生成するだけではない場合、自分で追加する方法を理解することだと思います。

質問が少し漠然としていることは承知していますが、わからないことはわかりません。入力、修正、説明はありがたいです。

言うまでもなく、誰もここに座ってEFを教えてくれるとは思っていません。良いチュートリアル、フォーラム、ブログなどが欲しいです。完全なエンティティ初心者向け


3
接続の存続期間に本当に注意してください:bit.ly/fi83NVこれは、コンテキストをリポジトリーに抽象化するときに本当に注意する必要があることです。それは機能しているように見えるかもしれませんが、実際にはゆっくりとますます多くのオープン接続をクロックアップしています
BritishDeveloper '17年

@BRitishDeveloper-非常に良いアドバイス。これは実際に私たちを捕まえましたが、逆の方法です-IoCコンテナーを使用してリポジトリーを取得しており、リポジトリーに割り当てられたコンテキストがしばらくすると接続を閉じるが、廃棄済みとしてフラグが付けられないという問題がありました/同様。最終的には、通常の廃棄状態と接続状態をチェックするIsDisposed()でコンテキストを拡張し、必要に応じて別の廃棄状態を構築できるようにしました。
基本的な

もう1つの便利なヒントは、新しいコンテキストを取得すると、古いコンテキストに関連付けられたオブジェクトに適切な変更の追跡が行われず、コンテキストの不一致の問題が発生することです。つまり、実行時間の長いアプリがあり、コンテキストを途中で変更した場合、実行すると、すべてのエンティティを再取得する必要があります。もっと面白くするために、実際には2つ同時に実行する必要があり、2つをうまくマッピングするためのコードを作成することになりました...
基本的な

1
@Basiclife私は同じ問題に遭遇しました:)私はしばらくの間、分離されたエンティティの更新についての私の考えを書いておくつもりでした、そしてあなたはちょうどそれをするように私を励ましました:britishdeveloper.co.uk/2011/03/…
BritishDeveloper 2011年

回答:


56

これらの記事は興味深いかもしれません...このシリーズは、POCOアプローチの長所と短所を実際に取り上げています。

http://blogs.msdn.com/b/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx

http://blogs.msdn.com/b/adonet/archive/2009/05/28/poco-in-the-entity-framework-part-2-complex-types-deferred-loading-and-explicit-loading。 aspx

http://blogs.msdn.com/b/adonet/archive/2009/06/10/poco-in-the-entity-framework-part-3-change-tracking-with-poco.aspx

これらの記事で著者は、リポジトリおよび作業単位パターンの実装におけるベストプラクティスを説明する将来の記事について言及していますが、それらは見つかりません。これらの記事はよく書かれていて、この著者からもっと読んでみたいです。


2
誰かがデザイナーを使用してEntity Frameworkに慣れているので、これはPOCOの素晴らしい入門書でした。
nathanchere 2010

1
作業単位のフォローアップを探している場合は、blogs.msdn.com / b / adonet / archive / 2009/06/16 /…
Mike

11

私はこれに遭遇しました:http : //blogs.msdn.com/adonet/pages/feature-ctp-walkthrough-code-only-for-the-entity-framework.aspx

これにより、最初にコードをステップバイステップで実行できます。EF4のCTP 3が必要です(この記事からリンクされているダウンロード)。

これは私が求めていたものにかなり近いです(理想的には、CTPに依存しないソリューションが望ましいでしょう)


注:このCTPは、当初はVS2010ベータ用でしたが、VS2010 RTMもサポートしています。
基本的な

7

30分ほどかかり、現在のVSで安定したEF1.0モデルを生成することをお勧めします。これにより、EF 4.0のメタファーと概念を理解するための長い道のりが手に入ります。単純なCustomer、Products、Orders dbを作成するだけです... Northwindを使用せずに、自分で行うことをお勧めします。


4

これは素晴らしい質問ですが、Entity Frameworkが成熟し続けるため、最新の状態に保つのは困難です。おそらく、最新の状態に保つための開始するのに最適な場所は、MicrosoftのEFページです。

グーグル(コードファーストに重点を置いた)中に役立つ他のいくつかのリンク:


3

Lermanの本か、「Pro linqオブジェクトリレーショナルマッピング」のような簡単なものを利用できます。すべての概念はPOCOと同じですが、コード生成を無効にし、edmx csdlでモデルに直接マップする(または独自のPOCOジェネレーターを作成する)必要がある点が異なります。すべてのマッピングの原則も同じです。とにかく、ランタイムではPOCOオブジェクトから派生したプロキシを使用しているため、インターセプトサポート(POCOプロパティの仮想化)について考慮する必要があります。


3

彼のプロジェクト構造は、私が取り組んでいた古いnHibernateベースのプロジェクトのように見えます。すべてのWCFジャズに専念しました。しっかりしたリンク。
メリット

2

ここだウォークスルーかなり良いに見えたEntity FrameworkのためのPOCOテンプレートには。また、ADO.NETチームのブログご覧ください。EFの知識のベースとして最初(EF v1.0)から始めたい場合は、Julia Lermanのプログラミングエンティティフレームワークの本が非常に完全であることがわかりました。


ありがとう-私はその本を見たことがなかったが、提供された両方のリンクを読んだ。テンプレートウォークスルーは、POCOオブジェクトを定義した後で追加機能をどのように追加できるかを説明するのに役立ちます(たとえば、遅延読み込み)。指定されたとおりにクラスを作成しても、それがエンティティになることも、モデルに関連付けられることもありません)私はブログで同様の経験をしました。私は本を​​手に入れることを検討します-それは有望に見えます-ありがとう。
基本的な

2
ジュリア・ラーマンの本に関して、彼女がEF4をカバーする第2版に取り組んでいることは言及する価値があります:learnentityframework.com/LearnEntityFramework/book/…。私は、発行予定日が今年の5月であることをどこかで読んだことを覚えていますが、ソースが見つかりません。また、私はこのサイトを見つけました:nakedobjects.net/home/index2.shtml
Slauma

Slauma、あなたは私が必要とする正確に何IKE見ているリンク-それは何とか複雑さを難読化しているようだサードパーティの「裸のObects」ライブラリを使っている以外-分については、私はあなたがそれを割れただろうと思って
基本


1

Julia Lermanが紹介する一連の紹介ビデオは、それぞれ約10分です。それらは入門ですが、いくつかの潜在的な学習障害を邪魔しないようにする実用的なヒントがたくさんあります。特に、SQL Serverプロファイラーを使用して実際のSQLがどのように表示されるかを示す彼女のデモが気に入りました。


1

切断されたシナリオを使用する場合は、特別な第4章で、Julie Lermanの本「Programming DbContext」を読むことをお勧めします。

私はブログなどで多くの例を見つけましたが、それらのほとんどすべてが接続シナリオに関するものです。

私も始めています。これらの本は私を大いに助けてくれました。ちなみに私は彼女の本を3冊買った。



0

うわー、たくさんの答え。POCO +インターフェース+リポジトリを完全に生成するT4テンプレートの微調整バージョンを含む例はどうですか?

https://entityinterfacegenerator.codeplex.com


リポジトリ/コンテキストのテストには興味深く便利ですが、エンティティ自体を抽象化する必要があるのはなぜですか?定義上、内部に機能コードを含めることはできません。
基本的な

あなたは正しいです。ほとんどの場合、ユーザーは個別のインターフェースを持つ必要はありません。しかし、循環参照を解決し、実際のクラスではなくインターフェイスをサードパーティと共有したい人には役立ちます。これは、共有に詳細な実装を必要としないサードパーティ統合による監査に合格する必要がある場合に役立ちます。
Believe2014 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.