使用Entity Framework查询来包含实体集合的子实体

4

我有一个ticket实体,它有ticketNotes(0个到多个),我想在查询tickets时返回每个注释的创建者用户详细信息。

我使用以下代码查询ticket:

var ticket = (from t in context.Tickets
.Include(t=>t.Site)
.Include(t=>t.Caller)
.Include(t=>t.Caller.Site)
.Include(t => t.Notes)
.Include(t=>t.OpenedByUser)
select t).First(t => t.TicketId == ticketId);

我的TicketNote类如下:

public class TicketNote
{
    public Guid TicketNoteId { get; set; }
    public string NoteText { get; set; }
    public DateTime CreatedTime { get; set; }
    public Guid TicketId { get; set; }
    public virtual Ticket Ticket { get; set; }
    public bool ReadOnly { get; set; }
    public DateTime? DateTimeDeleted { get; set; }
    public Guid TenantId { get; set; }

    [Required]
    [DefaultValue(typeof(Guid), "00000000-0000-0000-0000-000000000000")]
    public Guid CreatedByUserId { get; set; }
    [ForeignKey("CreatedByUserId")]
    public virtual User CreatedByUser { get; set; }
 }

我想添加

.Include(t => t.Notes.CreatedByUser)

但是由于 notes 是一个集合,所以我没有得到这个选项。

请建议实现拉回目前为 NULL 的 CreatedByUser 的最佳方法。

谢谢。


不确定 Any() 在这里是否适用 - .Include(t => t.Notes.Any().CreatedByUser) - Kami
嗨,谢谢。我刚试了一下,但是在“any”之后我没有任何实体选项,所以它不起作用。 - David Hawkins
也许这篇文章可以帮到你:[链接](http://www.codeproject.com/Articles/788559/Loading-Related-Entities-with-Entity-Framework-A-B)。特别是关于显式加载的部分。 - sszarek
2个回答

2

您可以包含更复杂的语句来获取多级集合。请尝试以下内容:

.Include(t => t.Notes.Select(n => n.CreatedByUser))

0

您有一个名为ticket的变量,其中包含属性Notes。 为了提高性能,您可以使用

ticket.Notes.Select(t => n.CreatedByUser)

请问如何在返回门票时使用它?我在我的存储库中返回了一个门票实体,因此无法在上下文关闭后调用选择操作。 - David Hawkins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接