【问题标题】:Entity Framework & Include实体框架和包含
【发布时间】:2011-06-22 09:28:36
【问题描述】:

全部 请帮助我在以下情况下使 include() 工作:

ctx.Messages
  .Include("Comments.CommentType")
  .Include("Comments.Owner")
  .Include("Comments.Message")
  .Where(m => m.RID == messageId)
  .SelectMany(m => m.Comments)
  .Where(c => c.CommentType.Id == commentTypeId)
  .ToList();

我应该如何重写这个查询?

附:我使用的是 EF 3.5(不是 4.0)

【问题讨论】:

  • 你是在告诉我,你的 9 个问题中没有人回答过 6 个吗?
  • 我需要知道在这种情况下出了什么问题。以及为什么包含不起作用。
  • 你没有给我们太多的帮助......你希望它做什么,它在做什么,你的数据模型是什么样的,......
  • Yannick,我希望 Comment 实体将具有 CommentType、Owner 和 Message 属性。此查询返回正确的 cmets 集,但它们具有空属性。我想推动 EF 加载这些属性。

标签: c# entity-framework include


【解决方案1】:

这很可能与包含和连接的issue 有关。基本上归结为:包含仅在语句末尾应用,并且由于加入,您的查询类型从IQueryable<Message> 更改为IQueryable<Comment>

通过删除连接,它应该正确地包含导航属性。请尝试以下操作:

ctx.Comments
   .Include("CommentType")
   .Include("Owner")
   .Include("Message")
   .Where(c => c.Message.RID == messageId && c => c.CommentType.Id == commentTypeId)
   .ToList();

【讨论】:

  • Yannick,我已经阅读了 MSDN 上的帖子,但我仍然不明白为什么在以下查询中 include() 不起作用: var messages = ctx.Messages.Include("Account"); var previews = ctx.MessagePreviews; var query = from m in messages join p in previews on m.IDALIAS 等于 p.IDALIAS where m.Id == messageId select new Pair { First = m, Second = p };
  • 据我了解,它与 Includes 的应用方式有关。显然,当查询的结果类型通过加入(SelectMany)而改变时,EF 不会应用包含。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多