Linq包括未加载列表

时间:2016-10-31 15:21:47

标签: c# entity-framework linq

我已经有一段时间试图找出Include子句没有加载相关集合的原因:我有两个具有一对多关系的类:

 public class AgencyNote : IAutId
    {
        [Key]
        public int aut_id { get; set; }
        public string Comment { get; set; }
        [DisplayName("Note Created Date")]
        public DateTime NoteDate { get; set; }
        [DisplayName("Contact Date")]
        public DateTime ContactDate { get; set; }
        [ForeignKey("tbl_agency")]        
        public int AgencyId { get; set; }
        [DisplayName("User")]
        public string RipsUser { get; set; }        
        public virtual ICollection<AgencyNoteAttachment> AgencyNoteAttachments { get; set; }
        public virtual tbl_agency tbl_agency { get; set; }
    }

 public class AgencyNoteAttachment
    {        
        [Key]
        public int aut_id { get; set; }
        public string Url { get; set; }
        public string FileName { get; set; }        
        public int AgencyNoteId { get; set; }
        [NotMapped]        
        [ForeignKey("AgencyNoteId")]
        public virtual AgencyNote AgencyNote { get; set; }        
    }

上下文类:

public DbSet<AgencyNote> AgencyNotes { get; set; } 

public DbSet<AgencyNoteAttachment> AgencyNoteAttachments { get; set; } 

这是我使用Include子句的操作:

private IQueryable<AgencyNote> GetNotes(int agencyId)
{                
  return _ctx.AgencyNotes
    .Include(a => a.tbl_agency)
    .Include(a => a.AgencyNoteAttachments)
    .OrderByDescending(f => f.NoteDate)
    .Where(x => x.AgencyId == agencyId);   
}

即使我知道它不是空的,我正在从这个动作获得AgencyNotesAttachments总是null,发生了什么?有任何问题让我知道......

1 个答案:

答案 0 :(得分:2)

如果仅在相关实体之间添加导航属性,则EF将在AgencyNoteAttachment表中为您创建FK列。现在,按照惯例,EF可以解释AgencyNoteId是该关系的FK,但是明智的做法就像你已经在模型中使用或在FK属性上使用ForeignKey属性那样:

public class AgencyNoteAttachment
{        
    [Key]
    public int aut_id { get; set; }
    public string Url { get; set; }
    public string FileName { get; set; } 

    [ForeignKey("AgencyNote")]       
    public int AgencyNoteId { get; set; }

    public virtual AgencyNote AgencyNote { get; set; }        
}

如果您想了解有关约定的更多信息,请查看此link