エンティティフレームワークアプリケーション(マッピングを含むDbContext)のコンテキストは、ドメインまたはデータアクセスレイヤによって所有されていますか?エンティティ・フレームワーク・アプリケーションのコンテキストは、ドメインまたはデータ・アクセス・レイヤが所有していますか?
ありがとうございました。
エンティティフレームワークアプリケーション(マッピングを含むDbContext)のコンテキストは、ドメインまたはデータアクセスレイヤによって所有されていますか?エンティティ・フレームワーク・アプリケーションのコンテキストは、ドメインまたはデータ・アクセス・レイヤが所有していますか?
ありがとうございました。
は、コンテキストは唯一のデータアクセス層内で使用して、ドメインに渡された結果をしなければならない - automapperのようなものは、ドメインにコンテキストエンティティを翻訳しますそれは完全にあなたのアプリケーションに依存
私の$ 0.02は、あなたのDIコンテナによって "所有"(処分)されるべきであるということです。これは、作業単位の実装で使用する必要があります。あなたのシナリオで
データコンテキストの(自動生成された)コードがドメインレイヤーまたはデータアクセスレイヤーに属している場合、OPは意味します。 –
することができます。本当に彼が何を意味するかは分かりません。 –
私はDI容器がそれを使用することを知っています。私は文脈がドメイン層かデータアクセス層によって所有されるべきかどうか疑問に思っていました。 – Rushino
オブジェクト。場合によっては、独自のドメインオブジェクトを持つ独立したドメイン層を持つことが理にかなっています。時にはそうではない。
実際、のほとんどのアプリケーションでは、EFエンティティはあなたのドメインオブジェクトに完全に適しており、「ドメイン」レイヤから直接コンテキストを参照する際には問題ありません。実際、EFはそのことを念頭に置いて設計されています。あなたのEFエンティティがいくつかの中層の層によってマッピングされているドメインオブジェクトの完全にセパートのセットを作成することは正当化される必要があります。
これは、別個のドメイン層を持つことは決して適切ではないというわけではありません。たとえば、WCFを介してエンティティを公開しているときなど、クロスプロセス/アプリケーションの境界問題を扱う場合など、新しいドメインオブジェクトを作成するのは理にかなっています(この場合、基本的にはDataContractクラス)に、エンティティのデータが入力されます。
しかし、これらのインスタンスは実際にはほとんどありません。これを頻繁にやっていると、あなたはアプリケーションをオーバーアーキテクチャーにしてしまい、 "純粋な"設計パラダイムの教義を犠牲にしてしまいます。
AutoMapperはドメインオブジェクトにマッピングするのは不適切です'IQueryable' –
が合意されましたが、コンテキストが.FirstOrDefault()または.ToList()で実際に呼び出されたときに、もはやIQuerableになりませんそれはありませんか? –
stack72
はい、あなたは 'ToList()'でそれを行うことができます。ただし、IQueryableプロジェクションと比べると、大して*非効率です。 –