2016-11-02 116 views
2

在昨天的post實體框架的核心不保存相關數據

兩個實體延續

public class Realtor 
{ 
    public Realtor() 
    { 
     Guid = Guid.NewGuid(); 
     Registration = DateTime.Now; 
    } 
    public int Id { get; set; } 
    public Guid Guid { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public DateTime Registration { get; set; } 
    public int SubdivId { get; set; } 
    public Subdiv Subdiv { get; set; } 
} 

public class Subdiv 
{ 
    public Subdiv() 
    { 
     Created = DateTime.Now; 
    } 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public DateTime Created { get; set; } 
    public List<Realtor> Realtors { get; set; } 
} 

我花測試

  1. 我加了一個Subdiv(TOSTER TM),並接受了他的ID
  2. 接下來,我添加一個房地產經紀人,並且我推出了在ID上找到的Subdiv屬性,新創建的TOSTER TM Realtor.Subdiv是Subdiv類型的對象。好。 enter image description here

  3. 然後我嘗試從基地中選擇新增的房地產經紀人。 OMG !! Realtor.Subdiv = null OMG !! enter image description here

  4. 我們得到Subdiv對象,這是缺乏房屋租賃上方,看到他List<Realtor> = null

enter image description here

請在解決這一問題有所幫助。

回答

1

試試這個:

Relator rl = Context.Relators.Include(r => r.Subdiv).First(s => s.Id == id); 

現在,您可以訪問方法多次Subdiv財產

欲瞭解更多相關的日期,你可以調用包括:

Relator rl = Context.Relators 
        .Include(r => r.Subdiv) 
        .Include(r => r.AnotherRel) 
        .First(s => s.Id == id); 

對於在多層次的實體深度:

如果Subdir是一個集合

Relator rl = Context.Relators 
        .Include(r => r.Subdiv) 
        .ThenInclude(sub => sub.SecondLevelDepth) 
        .First(s => s.Id == id); 

如果子目錄是一個實體

Relator rl = Context.Relators 
        .Include(r => r.Subdiv.Select(s => s.SecondLevelDepth) 
        .First(s => s.Id == id); 
+0

包括房地產經紀人不存在 –

+0

對不起,我倒轉方法調用:-)))Relators.Include(...)。第一個(...) –

+0

它的工作!太 :)) –

1

問題不在於保存相關數據(應該保存正確,您可以檢查數據庫內部),但加載它。

EF核心目前不支持延遲加載,所以爲了獲得相關數據,你需要明確要求它(所謂的預先加載):

Realtor rl = context.Realtors.Include(r => r.Subdiv).First(r => r.Id == id); 

欲瞭解更多信息,請參閱EF Core: Loading Related Data

+0

它的工作!謝謝!也就是說,所有的相關數據只能以這種方式獲得? –

+0

也用**顯式加載**,如鏈接中所述。 –

相關問題