Я изо всех сил пытаюсь заставить POCO работать с Linq-to-Sql, когда моя модель домена не управляется таблицами - это означает, что мои объекты домена не совпадают со схемой базы данных.
Например, в моем доменном слое у меня есть объект Appointment, у которого есть свойство Recurrence типа Recurrence.Это базовый класс с несколькими подклассами, каждый из которых основан на определенном шаблоне повторения.
В моей базе данных нет смысла иметь отдельную таблицу AppointmentRecurrence, когда между назначением всегда существует отношение один к одномузапись и ее повторение.Таким образом, таблица «Встречи» имеет столбцы RecurrenceType и RecurrenceValue.RecurrenceType имеет отношение внешнего ключа к таблице RecurrenceTypes, поскольку между типом повторения (шаблоном) и таблицей Appointments существует отношение один ко многим.
Если только нет способа создать правильное отображение между этимидве модели в Linq-to-Sql, мне осталось вручную разрешить несоответствие импеданса в коде.
Это становится еще сложнее, когда дело доходит до запросов к базе данных с использованием шаблона спецификации.Например, если я хочу вернуть список текущих встреч, я могу легко создать объект спецификации, который использует следующее выражение: appt => appt.Recurrence.IsDue
.Однако это не переводится в пространство Linq-to-SQL, потому что тип источника выражения не тот, который распознает L2S (например, это не объект L2S).
Так как я могу создать сложное отображениев Linq-to-SQL для поддержки моей доменной модели?
Или есть ли лучший способ реализовать шаблон спецификации в этом случае?Я думал об использовании интерфейсов, которые будут реализованы как моим доменным объектом, так и сущностью L2S (посредством частичных), но это невозможно из-за несоответствия двух графов объектов.
Предложения?