私は以下のような構造のプロジェクトを持っています: .Peristence - > .Repo - > .Services - > .Controllers - > MVC3 App。EF4:遅延読み込みを有効にすると、プロキシ作成を有効にする必要があるのはなぜですか?
各レイヤーにはそれぞれインターフェイスがあるアセンブリがあります。また、.Entities、.ViewModels、および共通コードアセンブリなどのアセンブリもあります。
永続性 - これは、EF4 datacontext(コードファースト)とEF4.3への参照を保持します。 GetContext()というContextを作成するためのファクトリがあり、このファクトリはIDisposableを実装しています。それは私がWindsorがLifestyleSingleton()と私のために何をするのだろうと思ったので、シングルトンの原因ではありません。
Repo - これは、リポジトリと仕様パターン(http://huyrua.wordpress.com/2010/07/13/entity-framework-4-poco-repository-and-specification-pattern/)を実装するリポジトリを保持します。
1.なぜプロキシ作成が遅延ロードが有効になっている場合に有効にする必要もありません:
他の層は自明...
質問ありますか?
2. lazyloading = falseを設定したい場合は、そこに.Include()を使用するために、IEnumerableをサービス層にObjectQueryにキャストできますか?
ありがとうございました。サービス層でのインクルードを使用しないことに関して私はあなたに同意します。 ObjectQueryのDbQuery isnteadを使用する限り、DbQueryにはない理由が分かりますか。where(string)は、 "it.ID> 2"のようなエンティティsql値をとるオーバーロードですか?また、私は、System.Data.Entity名前空間(フレームワークの一部)にあるObjectQueryを使用すると、私はRepoプロジェクトでEntityFramework(約2MB)を参照する必要はありません。 DbQueryの代わりにObjectQueryを使用することに不利な点はありますか? – diegohb
@diegohb:Entity SQLは 'DbContext'ではサポートされていません。そのため、' Where'の文字列オーバーロードはありません。 'ObjectQuery'を使いたいのであれば、' IObjectContextAdapter'を使って 'DbContext'から' ObjectContext'を引き出すことができます(あなたはそれを知っていますか?)。しかし、本当にEntity SQLを使いたいのでなければ、 'DbContext'を使い、EntityFramework.dllへの参照を入れることをお勧めします。さもなければ 'DbContext'を全く使用する理由はありません。あなたはEF 4.0を使うことができます。 – Slauma
ありがとう!はい、私はobjectcontextadapterについて知っていました。私のUIはjqGridコンポーネントを使用しており、フィルタリング機能を提供しています。フィルタリングパラメータを文字列クエリに変換してサービスに渡す予定です。サービスに渡すには、Repo(ObjectContextAdapterとDbContextにアクセスする必要があります)に渡す必要があります。 ESQLを使用するためのオーバロードここでは、EntityFramework.dllに対するUIのハードリファレンスを作成したくないだけです。このオーバーロードを使用するには、DbContextを使用することをお勧めします。 huyruaのリンクを見たことがあるなら、ImはすべてのGenericRepoメソッドをオーバーロードする必要があります。 – diegohb