私は最近同じ問題を抱えていました。パターンは異なりますが、それでも LINQ to SQL (L2S) です。漏れを避けるために、2つの異なる方法を試しました。
まず、DTO とマッピング レイヤーを使用してみました。そのため、テーブルへの 1 対 1 のマッピングを持つ非常に単純なオブジェクトを作成しました。それらはすべて L2S 属性で装飾されていました。次に、DTO をビジネス オブジェクトにマップするためのマッピング レイヤーを作成しました。これらはすべて、Doman Driven Design のリポジトリ パターンによって隠されていました。そのため、ビジネス オブジェクトの消費者は、L2S が内部にあることを知りませんでした。
次に、主にバラエティです。L2S の XML マッピング機能を使用してみたため、オブジェクト自体に属性は必要ありませんでした。コレクションについては、L2S コレクションの代わりに IEnumerable を公開しました。ビジネス クラスの内部を見れば、L2S (EntitySet または Ref) の使用をまだ検出できます。しかし、クラスの消費者は知りませんでした。そのため、多少の漏れはありますが、抜本的なものはありません。
結局、最初のパターンに固執しました。2 つ目は機能し、ビジネス レイヤーのインターフェイスを変更せずに L2S を置き換えることができましたが、XML マッピングには満足できませんでした。最初のパターンでは、データベースとビジネス オブジェクトがより明確に分離されていました。より多くのコードが必要でした。最初の方法は、テーブルとは異なる方法でビジネス オブジェクトを進化させることができたので、私たちにとってはうまく機能しました。プロジェクトの初期には、オブジェクトがテーブルとほぼ 1 対 1 であったため、xml マッピングが機能していました。
そのため、最終的に L2S とドメインの間にレイヤーを配置します。出来た。より多くのコードが必要でしたが、本当に単純なものでした。そして、それはすべて非常にテスト可能でした。