【发布时间】:2011-03-09 14:38:24
【问题描述】:
我有类似下面的多对多关系表。
public class Shop{
public int Id { get; set; }
public virtual ICollection<ShopFacility> ShopFacilities { get; set; }
}
public class ShopFacility
{
public int Id { get; set; }
public int ShopId { get; set; }
public int FacilityId { get; set; }
public virtual Shop Shop { get; set; }
public virtual Facility Facility { get; set; }
}
public class Facility
{
public int Id { get; set; }
public virtual ICollection<ShopFacility> ShopFacilities { get; set; }
}
并且,获取商店信息。
using (var context = new DataContext())
{
return context.Shops.Include(s => s.ShopFacilities)
.Include("ShopFacilities.Facility") // This line
.First(x => x.Id == id);
}
我想要做的是使用 Lambda 表达式而不是字符串来调用 Include 方法,以实现多对多关系。我试图像下面的代码那样实现:
using (var context = new DataContext())
{
return context.Shops.Include(s => s.ShopFacilities)
.Include(s => s.ShopFacilities.Facility) // Cannot compile
.First(x => x.Id == id);
}
但你猜我无法编译它。其实第一个代码sn-p效果很好,所以基本没问题,不过我有点好奇有没有变通方法。
任何帮助将不胜感激,
哟
【问题讨论】:
-
只是想说你并不真的需要 ShopFacility 类。您的 Shop 类可以有一个
ICollection<Facility>,而您的 Facility 类可以有一个ICollection<Shop>。 EF Code First 将理解您需要多对多关系。 -
我知道EF Code first非常聪明,但实际上ShopFacility还有一些其他属性,例如评论,费用等,所以我必须拥有它。我很抱歉,更不用说。无论如何,谢谢!
标签: entity-framework linq-to-entities ef-code-first