オブジェクトがビジネスロジックから永続化される方法を分離するための良いパターンです。データベース内のオブジェクトがビジネスロジックにどのように永続化されているかを公開すると、これらのオブジェクトがどのように永続化されるかを変更するときに、ビジネスロジックを変更しなければならなくなります。エンティティフレームワークのリポジトリパターンとファンクションの検索
ビジネスロジックがFooをオブジェクトとして使用し、DAL(EFを使用)がFooDbModelを永続オブジェクトとして使用すると仮定します。リポジトリパターンを使用したCRUD操作の構築は非常に簡単です。Foo
オブジェクトを取得し、FooDbModel
をビルドし、必要な作業を行い、Foo
をビルドして返します。
しかし、Find
の機能がもう少し関与しているとき。
f
はタイプ
Foo
(ない
FooDbModel
)である
Repository.Find(f => f.Name == "something");
:理想的には、私のような何かをしたいです。それはEFで可能ですか?私はf
を渡すことは望ましくありません。これは、タイプがFooDbModel
の場合、データの永続性がBLに公開されているためです。
これを行うにはトリックがありますか?
フィルタ( 'Where')の前のプロジェクト(' Select')? –
@IvanStoevその問題は、投影するためにすべてのデータをDBにメモリに格納する必要があることです。 Repo.GetAll()と似ていますが、どこに(...)。 dbが本当に小さい場合を除き、これはおそらく最善の方法ではありません。しかし、ありがとう。 – Husain
あなたは 'IQueryable'でそれをしていません。あなたのメソッドがどれほど正確に構造化されているかはわかりませんが、私が見る 'Find'メソッドの**実装**はcontext.Set().Select(m => new Foo {...})のようなものです。 (f => ...) 'これはSQLに変換する必要があります。 –