我想使用 Entity Framework 4.2 建立一个对象图。
现在,我有 POCO 实体,使用 ICollection 作为导航属性。我想避免使用 EntityCollection 或任何特定于 EF 的东西。
我想避免过度使用 Include 引起的大量连接。给定一个对象,我想填充它的导航属性,从而产生一个单独的数据库查询。
有没有办法直接填充 ICollection?现在,我正在解决这个问题,但这真的很痛苦。
// grab the user, brand users and brands
User user = entities.Users
.Include(item => item.BrandUsers.Select(brandUser => brandUser.Brand))
.Where(item => item.Name == userName)
.SingleOrDefault();
// grab the pending share grants and brands
entities.Users
.Include(item => item.ToShareGrants.Select(shareGrant => shareGrant.Brand))
.Where(item => item.Id == user.Id)
.Load();
return user;
我不喜欢这种方法的一件事是我正在重新查询顶级对象。如果我不这样做,则在没有返回任何对象时不会填充导航属性(左为 NULL)。例如,以下代码仅在返回结果时才有效:
entities.ShareGrants
.Include(item => item.Brand)
.Where(item => item.ToUserId == user.Id)
.Load();
我很好奇在实体框架中是否有一种我不知道的方法来建立这些类型的关系。如果有人知道分步填写导航属性的简单方法,我将不胜感激代码示例。