繁体   English   中英

在Entity Framework中加载子实体

[英]Load child entities in Entity Framework

我有这些POCO课程:

public class  Task
    {
        public int TaskId { get; set; }
        public int ProjectId { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime? DueDate { get; set; }
        public int UserId { get; set; }
        public string Tags { get; set; }
        public string FileName { get; set; }
        public virtual Project Project { get; set; }
        public virtual List<TaskAssigned> TaskAssigns { get; set; }
        public virtual List<TaskComment> TaskComments { get; set; }
        public virtual User User { get; set; }
    }

 public class User
    {
        public int UserId { get; set; }
        public string Name { get; set; }
        public int AccountId { get; set; }
        public string Email { get; set; }
        public string Password { get; set; }
        public bool IsAdmin { get; set; }
        public virtual Account Account { get; set; }
    }

public class TaskComment
    {
        public int TaskCommentId { get; set; }
        public int TaskId { get; set; }
        public int UserId { get; set; }
        public string Comment { get; set; }
        public string FileName { get; set; }
        public virtual User User { get; set; }
    }

    public class TaskAssigned
    {
        public int TaskAssignedId { get; set; }
        public int TaskId { get; set; }
        public int UserId { get; set; }
        public virtual User User { get; set; }
    }

我试图通过Id获取任务并加载此任务的所有相关实体,但TaskComment和TaskAssigned的User实体对于除Task中的User实体之外的其他用户为null:

public Task GetTaskById(int taskId)
    {
        return context.Tasks.Include("TaskAssigns").Include("TaskComments").Include("User").Where(t => t.TaskId == taskId).FirstOrDefault();
    }

Include的“路径” Include全包,这意味着您可以指定用a分隔的多个属性. (点)和EF将包括“属性路径”的所有部分。

在你的情况下,这应该工作:

public Task GetTaskById(int taskId)
{
    return context.Tasks
               .Include("TaskAssigns.User")
               .Include("TaskComments.User")
               .Include("User").Where(t => t.TaskId == taskId).FirstOrDefault();
}

更改上下文属性如下

context.DataContext.ContextOptions.ProxyCreationEnabled = true; 
context.DataContext.ContextOptions.LazyLoadingEnabled = true;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM