当我的域模型不是表驱动时,我正在努力找到一种方法让POCO与
Linq-to-sql一起工作 – 这意味着我的域对象与数据库模式不匹配.
例如,在我的域层中,我有一个Appointment对象,它具有Recurrence类型的Recurrence属性.这是一个基类,有几个子类,每个子类都基于特定的重复模式.
在我的数据库中,当约会记录与其重现之间始终存在一对一的关系时,拥有单独的AppointmentRecurrences表是没有意义的.因此,Appointments表具有RecurrenceType和RecurrenceValue列. RecurrenceType与RecurrenceTypes表具有外键关系,因为重复类型(模式)和Appointments表之间存在一对多关系.
除非有办法在Linq-to-sql中创建这两个模型之间的正确映射,否则我将手动解决代码中的阻塞不匹配问题.
在使用规范模式查询数据库时,这变得更加困难.例如,如果我想返回当前约会的列表,我可以轻松创建一个使用以下表达式的Specification对象:appt => appt.Recurrence.IsDue.但是,这不会转换为Linq-to-sql空间,因为Expression的源类型不是L2S识别的类型(例如,它不是L2S实体).
那么如何在Linq-to-sql中创建复杂的映射来支持我的域模型呢?
或者,在这种情况下是否有更好的方法来实现规范模式?我想过使用我的域对象和L2S实体(通过局部)实现的接口,但是这两个对象图的阻抗不匹配是不可能的.
建议?