实体框架代码第一个关系映射

时间:2012-07-16 08:32:50

标签: .net sql-server-2008 entity-framework ef-code-first

我有一个使用此架构的数据库,是否可以在Employee和Clinic中添加TimeSlots列表?如果是,它的映射配置是什么。

enter image description here

感谢

1 个答案:

答案 0 :(得分:2)

不,您必须拥有包含ClientEmployee导航属性的TimeSlots实体。如果您希望在TimeSlotsEmployee实体中拥有Clinic,则只能通过非映射属性来实现这一功能,该属性将访问相关的ClientEmployee

// This is from Employee or Clinic class
[NotMapped]
public IEnumerable<TimeSlot> TimeSlots
{
    get 
    {
        // ClientEmployees is mapped navigation property
        return ClientEmployees.SelectMany(ce => ce.TimeSlots);
    }
}

你看到了问题吗? EmployeeClinic可以有多个相关ClientEmployees,每个ClientEmployee可以有多个TimeSlots - 此属性将为您提供所有相关ClientEmployees的所有时间段 - 如果您只需要一个方法并将ClientEmployeeId作为参数传递:

public IEnumerable<TimeSlot> GetTimeSlots(int id)
{
    // ClientEmployees is mapped navigation property
    return ClientEmployees.Where(ce => ce.ClientEmployeeId == id)
                          .Select(ce => ce.TimeSlots);
}