2016-11-21 46 views
1

我在我的項目中的兩個實體:我可以更新工作單位庫存模式中的導航屬性嗎?

public class A 
{ 
    public int Id { get; set; } 
    public DateTime CreatedDateTime { get; set; }  
    public virtual B B { get; set; } 
} 


public class B 
{ 
    public int Id { get; set; } 
    public Nullable<DateTime> LastAliveTime { get; set; }  
    public virtual ICollection<A> A { get; set; } 
} 

我使用實體框架的工作庫模式的單位,我做到以下幾點:

stirng id = "abc"; 
var aService = unitOfWork.GetRepository<A>(); 
var ins = aService.FindBy(a => a.Id == id); 

我知道,這是確定以更新插入並保存dbcontext

我需要知道的是:

ins.B.LastAliveTime = DateTime.UtcNow; 
將這項工作始終

這是更新B實體的LastAliveTime的正確方法還是應該像下面初始化另一個存儲庫?

var bService = unitOfWork.GetRepository<B>(); 
+0

爲什麼根本不需要每個實體類型的存儲庫? – Evk

+3

假設'虛擬'表示延遲加載,它取決於底層的上下文生存期。如果上下文仍然存在,當你調用'ins.B',或者'ins.B'已經被加載時,它就會工作。否則,你會得到'InvalidOperationException',試圖在處理上下文時加載'B'。 – Dennis

回答

1

不需要做這一點。

要麼你必須使用急切的加載(Include(x=>x.B))或延遲加載。那麼你不會有任何問題。

+0

我需要對現有項目進行最小限度的修復,正如@Dennis所提到的那樣,截至目前代碼正在工作,如果我的上下文沒有處理,現在就可以完成。 –

相關問題