2016-09-08 146 views
0

我有以下表設計。延遲加載不與1到0或1的關係

enter image description here 正如在這裏可以看到,有一個一對多的關係,與許多在EpisodePatient側。

然後,我有以下類。

public class EpisodeModel 
{ 
    public int ID { get; set; } 
    public virtual EpisodePatientModel EpisodePatient { get; set; } 
} 
public class EpisodePatientModel 
{ 
    public int EpisodePatientID { get; set; } 
    public virtual EpisodeModel Episode { get; set; } 
} 

我設立的關係,實體框架,是一個爲0或很多。原因是,我從視圖中選擇了所有EpisodePatients,並且我希望在訪問時將Episode加載爲Lazy。

這就是我如何建立我的關係。

modelBuilder.Entity<EpisodePatientModel>().HasRequired(r => r.Episode).WithOptional(o => o.EpisodePatient); 

我想這是作爲一個一到零或許多在我的代碼,作爲一個小插曲總會有一個EpisodePatient,反之亦然。

我面臨的問題是,當我加載EpisodePatient,並嘗試訪問Episode鏈接的項目時,它始終爲空,並且不會發生延遲加載。

我在這裏做錯了什麼?

UPDATE

這是我如何加載原始EpisodePatient項目。

this.DbContext.EpisodePatients.AsNoTracking(); 
+0

顯示查詢其加載EpisodePatient。 –

+0

@mwisnicki請參閱我的更新 –

+0

在你提到的1到0或1的標題中,但是在你說的細節中,有一對多關係,與EpisodePatient side_上的許多關係?如果它是一對多的話,你必須將它改爲:'public virtual ICollection EpisodePatient {get;組; } – Ziyad

回答

0

嘗試沒有AsNoTracking(),因爲如果你使用它的上下文不跟蹤,如果你需要,你可以不包括更多的數據。

並嘗試改變關係一對多。

modelBuilder.Entity<EpisodePatientModel>().HasRequired<Episode>(s => s.Episode).WithMany(s => s.EpisodePatient); 
+0

這沒有奏效。 –

+0

嘗試關係一對多但仍未使用'AsNoTracking()'。 –

1

我重新創建你的模型,但用數據說明如下圖所示,它精細workes:

public class EpisodeModel 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Title { get; set; } 

    public virtual EpisodePatientModel EpisodePatient { get; set; } 
} 

public class EpisodePatientModel 
{ 
    public string Name { get; set; } 

    [Key, ForeignKey("Episode")] 
    public int EpisodeId { get; set; } 
    public virtual EpisodeModel Episode { get; set; } 
} 
+0

我爲測試目的添加了標題和名稱屬性 – Ziyad

+0

讓我試試流利的API。我不確定你爲什麼將EpisodeId設置爲Key和外鍵? –

+0

因爲關係是1-1或1-0,所以只有主實體應該有它自己的主鍵(id),並且相關的實體主鍵是主實體主鍵,這就是爲什麼我們用[Key,ForeignKey ] – Ziyad