2014-02-23 174 views
0

我使用实体框架有许多一对多的关系进行了一些问题:检索多对多的关系数据

我有一个ReservationMembership作为许多一对多的关系:

public class Reservation 
{ 
    public virtual ICollection<Membership> Membership { get; set; } 
} 

我怎样才能检索到MembershipID从我从预订选择membersip形式foreach循环:

reservations = reservationRepo.Reservations.Where(r => 
    r.StartDatetime >= requestDate && r.EndDatetime <= endDate 
    && r.Branch.BranchID == branchId).AsEnumerable(); 

foreach (var reservation in reservations) 
{ 
    reservationList.Add(new ReservationModel 
    { 
     ReservationID = reservation.ReservationID, 
     StartDatetime = reservation.StartDatetime, 
     EndDatetime = reservation.EndDatetime, 
     MembershipID = reservation.Membership???? 
    }); 
} 

如果我只是换货政... RN reservations我:

The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.","

回答

0

您的模型说:有连接到预约成员的集合,看起来你正在试图获得只是其中之一。你确定这就是你需要的吗?

你可以得到MembershipID名单:

reservations = reservationRepo.Reservations.Include("Membership").Where(r => 
    r.StartDatetime >= requestDate && r.EndDatetime <= endDate 
    && r.Branch.BranchID == branchId).AsEnumerable(); 

foreach (var reservation in reservations) 
{ 
    reservationList.Add(new ReservationModel 
    { 
     ReservationID = reservation.ReservationID, 
     StartDatetime = reservation.StartDatetime, 
     EndDatetime = reservation.EndDatetime, 
     MembershipIDs = reservation.Membership.Select(m => m.MembershipID).ToList() 
    }); 
} 

我添加Include调用查询,热切负载Membership内容。否则,由于延迟加载,您会在foreach循环内收到大量不必要的数据库调用。

您也应该使EF映射的投影部分只从必要的列中获取数据。这应该会减少数据库和应用程序之间的数据传输数量。

+0

我已经试过这种方法,我得到这个错误:已经有一个打开的DataReader与这个命令关联,必须先关闭它。 – Alvin

+1

此错误未连接到查询。这是上下文传递的问题。 – MarcinJuraszek

+0

任何其他方法?试图寻找其他方式来解决这个问题。 – Alvin

相关问题