1

我希望能够在我们当前使用的数据库模型中使用不同表示的域模型。EF代码优先 - 多对多数据库到1到多个域

目前,我们在时间表和订单项之间存在多对多的关系,因此时间表中有许多订单项,每个订单项可以在多个时间表中重复使用。在我们的代码库中,虽然我们只需要关注特定的时间表,所以这些情景会将现有的订单项添加到日程安排中,或者将新的订单项添加到日程安排中,或者交替地获取某个订单项的集合给定时间表。

但是,在数据库中,我们将行项目的排序存储在映射表上。我想要在doman模型中将此关系表示为计划和订单项之间的一对多关系,并且订单项域模型具有整数顺序属性。

我似乎无法找到任何方法使用EF Code First轻松扁平化该模型,并且可以将该属性放到订单项上。

本质上的数据库是:

Schedule 
-Id 

ScheduleLineItem 
-ScheduleId 
-LineItemId 
-Order 

LineItem 
-Id 

,我想使用的域模型是:

Schedule 
-Id 
-List<LineItem> 

LineItem 
-Id 
-Order 

回答

1

没有办法拉平它的映射。您必须以与数据库设计相同的方式映射模型,并且您可以公开非模仿非现有一对多关系的自定义非映射属性。

例如:

public class Schedule 
{ 
    public int Id { get; set; } 
    public virtual ICollection<ScheduleLineItem> ScheduledItems { get; set; } // This is necessary for EF 

    public IEnumerable<LineItem> LineItems 
    { 
     return ScheduledItems.OrderBy(i => i.Order).Select(i => i.LineItem); 
    } 
}