2011-10-29 91 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。