2

EntityFramework4でn層アプリケーションの設計に問題があります。

サーバー側、私のアプリケーションには3つのレイヤーがあります:-1つのサービスレイヤー(WCF)-1つのビジネスレイヤー-1つのDataAccessレイヤー(EF4と連携)

エンティティはPOCOであり、独立したプロジェクト/アセンブリに配置されます。

ビジネスレイヤーとDataAccessレイヤーのオブジェクトを作成するために依存性注入を使用しているため、インターフェイスのみを操作し、ビジネスレイヤーのEFに依存していません。

パフォーマンスを向上させるためにEFコンパイル済みクエリを使用したいと思います。

しかし、私の(ビジネス)クエリはビジネスレイヤーで定義されています。私のアーキテクチャでは、DataAccessはCRUDメソッドのみを提供しているためです。

したがって、コンパイルされたクエリはビジネスレイヤーで定義する必要がありますが、EFに依存しておらず、結合を緩めたくないので、そこからObjectContextを呼び出すことはできません。

また、DataAccessでクエリを定義することは、私のアプリケーション設計に適合しません。

では、ビジネスクエリをビジネスレイヤーからDataAccessレイヤーに挿入して、コンパイル済みクエリで使用できるようにする一般的な方法があるかどうかを誰かが知っていますか?

私は多くのことを試し、どこを見ても、これに対する答えを見つけることができませんでした...:(EFはその種のn層アプリケーションにうまく適合しないようです。

4

1 に答える 1

0

コンパイルされたクエリは、データアクセスクラスに依存するデータアクセス固有の機能であるため、データアクセス層に属します。デザインがこれを受け入れない場合は、データアクセス固有の機能の準備ができていません=デザインを変更するか、データアクセス固有の機能を使用しないでください。

最も簡単な方法は、コンパイルされたクエリをコンテキストに追加し、それらをコンテキストのメソッドとして公開することです。

public IQueryable<SomeEntity> SomeQuery(string someParam) {
    return compiledQuery.Invoke(this, someParam);
}

次に、これらのメソッドをコンテキストのインターフェイスに追加します。

同様のアプローチに従い、ビジネスレイヤーに表示される任意のデータアクセスインターフェイスでコンパイル済みクエリを公開できます。

于 2012-06-18T10:04:53.927 に答える