我的數據庫中有一個Person和Occupation表。當我創建一個人時,他們的默認OccupationId爲空。id更新後實體框架延遲加載
比方說,我創建了一個人,其ID是11。此外,還有一個職業,比方說,潛水員,它的編號是53,那麼我做到以下幾點:
using (var context = new DbEntities())
{
person.OccupationId; //currently null
person.Occupation; //currently null
var person = context.People.First(x => x.Id == 11);
person.OccupationId=53;
context.SaveChanges();
var occupation = person.Occupation.Description; //Exception: Occupation is null
}
的代碼失敗在最後一行,因爲職業最初是空的,並且新的職業沒有得到保存後的懶加載。如果這個人在運行這個代碼之前有一個職業,而舊的職業是懶惰加載的,那麼新的職業會在保存後出現。
換句話說,如果人有清潔工的職業第一那麼這將工作:
using (var context = new DbEntities())
{
var person = context.People.First(x => x.Id == 11);
var occupation = person.Occupation.Description; //this would say Janitor
person.OccupationId=53;
context.SaveChanges();
var occupation = person.Occupation.Description; //This would say Diver
}
有沒有辦法來延遲加載新職業後的保存,如果初始職業爲空?
看着你的編輯,如果'佔領'是空的,它會得到惰性加載應該沒關係......這就是延遲加載的全部要點。 – Metalstorm
感謝您的回答。我想這會工作,但我想要的東西少 「哈克」 :) 我結束了使用此: 如果(!person.Occupation == NULL && person.OccupationId = NULL) context.Entry(人)。參照(X => x.Occupation).Load(); – VARAK
我不會說我發佈的實現是'hacky',據我所知,這是很好的OO。 – Metalstorm