2012-08-17 70 views
3

我有这些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这个任务,但用户实体的所有相关实体为空其他用户比用户在任务实体:

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

回答

9

Include“路径”是包罗万象的,这意味着你可以指定一个.(点)分隔的多个属性和EF将包括“属性的所有部分路径”。

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

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

刚刚得知,我可以使用旁边使用拉姆达的其他.Includes(点)的方法。由于lamba表达似乎无法看到儿童实体的孩子,因此非常有用。 – 2013-09-25 20:20:20

0

变化上下文属性如下

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