ドメインモデルがテーブル駆動型でない場合、つまりドメインオブジェクトがデータベーススキーマと一致しない場合に、POCOをLinq-to-Sqlで機能させる方法を見つけるのに苦労しています。
たとえば、私のドメインレイヤーには、RecurrenceタイプのRecurrenceプロパティを持つAppointmentオブジェクトがあります。これは、特定の再発パターンに基づいたいくつかのサブクラスを持つ基本クラスです。
私のデータベースでは、Appointmentレコードとその繰り返しの間に常に1対1の関係がある場合、個別のAppointmentRecurrencesテーブルを持つことは意味がありません。したがって、AppointmentsテーブルにはRecurrenceType列とRecurrenceValue列があります。RecurrenceTypeは、RecurrenceTypesテーブルと外部キーの関係にあります。これは、Recurrence Type(パターン)とAppointmentsテーブルの間に1対多の関係があるためです。
Linq-to-Sqlでこれら2つのモデル間に適切なマッピングを作成する方法がない限り、コードのインピーダンスの不一致を手動で解決する必要があります。
これは、仕様パターンを使用してデータベースにクエリを実行する場合、さらに困難になります。たとえば、現在の予定のリストを返したい場合は、次の式を使用する仕様オブジェクトを簡単に作成できますappt => appt.Recurrence.IsDue
。ただし、式のソースタイプはL2Sが認識するものではないため(たとえば、L2Sエンティティではないため)、これはLinq-to-SQLスペースに変換されません。
では、ドメインモデルをサポートするためにLinq-to-SQLで複雑なマッピングを作成するにはどうすればよいですか?
または、この場合、仕様パターンを実装するためのより良い方法はありますか?ドメインオブジェクトとL2Sエンティティの両方で(パーシャルを介して)実装されるインターフェイスを使用することを考えましたが、2つのオブジェクトグラフのインピーダンスの不一致では不可能です。
提案?