0
我是新來的實體框架,想知道爲什麼我的外鍵屬性(S)必須是「虛擬」即使數據可以加載沒有非虛擬外鍵。是否對使用POCO的外鍵使用虛擬類型?
可以說我有兩個班。兩者都有虛線關鍵字註釋掉。數據仍然會被加載而沒有虛擬。那麼爲什麼我們必須使用虛擬?一旦我們使用Context.SaveChanges()添加/更新/刪除記錄,它會產生影響嗎?
public class Application
{
public int ApplicationID{get;set;}
public string Name{get;set;}
//public virtual ICollection<ApplicationPages> Pages{get;set;}
public ICollection<ApplicationPages> Pages{get;set;}
}
public class ApplicationPages
{
public int ApplicationPageID{get;set;}
public string Name{get;set;}
public int ApplicationID{get;set;}
[ForeignKey("ApplicationID")]
public Application Application{get;set;}
//public virtual Application Application{get;set;}
}
非常感謝您的回覆。其實,我問這個問題的原因是,我正在使用的應用程序是使用實體框架4.3,我已禁用延遲加載和使用延遲加載。我的類有導航屬性,但它們不是創建爲「虛擬」。一切工作正常,但更新功能給我很難。每當我更新一個父行,子行得到重複。所以我想知道也許是因爲我沒有使用虛擬作爲關鍵字實體框架我的上下文的鬆散軌道,並認爲在子對象中有所改變,並將它們作爲新行插入。 – Tauseef 2013-03-06 16:58:36
是的,我相信虛擬標籤也用於解析對象圖中的FK關係,這可能會解釋重複 - 聽起來像EF沒有在您的Pages集合中看到更新的項目,因此它會插入它們。請參見此網址的幻燈片6 http://www.slideshare.net/JulieLerman/persistence-ignorance-in-entity-framework-4-julie-lerman,顯示代理參與檢測更改。關鍵是,如果你不使用虛擬,你將不會得到一個代理類。這是一個相當複雜的領域,請搜索Julie Lerman的博客以獲得更好的解釋,或查看她的書籍。 – Ackroydd 2013-03-06 19:47:51
感謝您的回覆,並指出我正確的方向。 – Tauseef 2013-03-07 13:26:13