EF代码优先 - 多对多数据库到1到多个域

时间:2011-11-30 00:44:46

标签: entity-framework entity-framework-4.1 many-to-many ef-code-first

我希望能够为我们当前使用的数据库模型提供不同表示形式的域模型。

目前,我们在计划和订单项之间存在多对多关系,因此计划包含多个订单项,并且每个订单项都可以在多个计划中重复使用。在我们的代码库中,虽然我们只需要关注特定的时间表,因此方案会将现有的订单项添加到计划中或将新的订单项添加到计划中,并且可选地,获取一个订单项的集合。给定时间表。

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

我似乎找不到使用EF Code First轻松压扁此模型的方法,并且可以将该属性放到订单项上。

基本上数据库是:

Schedule
-Id

ScheduleLineItem
-ScheduleId
-LineItemId
-Order

LineItem
-Id

我想使用的域模型是:

Schedule
-Id
-List<LineItem>

LineItem
-Id
-Order

1 个答案:

答案 0 :(得分: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);
   }
}