2011-10-29 31 views
4

我试图加载的SingleOrDefault实体相关的实体,但我得到以下异常:如何加载IEnumerable类型的相关实体<T>

IEnumerable类型的导航属性不是一个单一的实现类型ICollection

我试过这样做了几种方式,并最终得到上述每个查询对上下文相同的错误(我已经包括在评论中的其他方式)。

using(var context = CustomObjectContextCreator.Create()) 
     { 
      return context.Job.Include("Surveys").Include("SiteInfoes") 
     .Where(r => r.Jobid == jobId).SingleOrDefault(); 

      //context.ContextOptions.LazyLoadingEnabled = false; 
      //var Job = context.Job.Where(r => r.Jobid == jobId).SingleOrDefault(); 
      //context.LoadProperty(Job, "Surveys"); 
      //context.LoadProperty(Job, "SiteInfoes"); 

      //var Job = (from j in context.Job 
      //     .Include("Surveys") 
      //     .Include("SiteInfoes") 
      //    select j).SingleOrDefault(); 

      //var Job = context.Job.Where(r => r.Jobid == jobId).SingleOrDefault(); 
      //var surveys = context.Surveys.Where(s => s.JobID == jobId); 
      //var wellInfoes = context.SiteInfoes.Where(w => w.Jobid == jobId); 
      //Job.Surveys = surveys.ToList(); 
      //Job.SiteInfoes = wellInfoes.ToList(); 

      //return Job; 
     } 

下面是我使用的POCO对象:

public class Job 
    { 
     public int? Jobid { get; set; } 
     public string JobLocation { get; set; } 
     public string JobName { get; set; } 
     public virtual IEnumerable<Survey> Surveys { get; set; } 
     public virtual IEnumerable<SiteInfo> SiteInfoes { get; set; } 
    } 

public class Survey 
    { 
     public int SurveyID { get; set; } 
     public int? JobID { get; set; } 
     public DateTime? DateTime { get; set; } 
     public string Report { get; set; } 
     public virtual Job Job { get; set; } 
    } 

public class SiteInfo 
    { 
     public int Jobid { get; set; } 
     public string SiteLocation { get; set; } 
     public virtual JobInfo JobInfo { get; set; } 
    } 

如何正确加载相关实体?

回答

5

IEnumerable<T>不支持作为导航集合的类型。您必须使用ICollection<T>或从它衍生出来的另一个接口(例如IList<T>)或具体实施ICollection<T> - 像List<T>HashSet<T>

+0

听起来好像这就是例外告诉我。感谢您的澄清。 – Rich

+1

你能解释为什么IEnumerable不支持? - 我很想知道。 – series0ne

2

这是因为您需要ICollection而不是IEnumerable。