我從NHibernate的轉換項目,實體框架6如何通過導航屬性訪問外鍵ID屬性時避免延遲加載?
鑑於這個簡單的模型的過程是:通過組織導航屬性
public class User
{
public int ID { get; set; }
public string FullName { get; set; }
public virtual Organization Organization { get; set; }
// [...]
}
public class Organization
{
public int ID { get; set; }
public string Name { get; set; }
public virtual List<User> Users { get; set; }
// [...]
}
訪問主鍵(ID),將導致整個組織實體被加載到上下文:
foreach(var user in db.Users)
Console.WriteLine(user.Organization.ID);
鑑於OrganizationID外鍵是用戶行的一部分,我應該能夠在不造成整個的延遲加載來訪問它實體(實際上,NHibernate做到了這一點)。
由於缺少將外鍵ID的屬性添加到所有100多個實體中,所以我可以在不加載實體的情況下訪問它們的值,是否有任何措施可以避免此行爲?
編輯:此外,即使做一個空檢查將導致組織實體(不NHibernate的)的負載:
foreach(var user in db.Users)
Console.WriteLine(user.Organization != null);
我想這是由於在途中實體代理的根本分歧在這兩個框架中實施。所以我必須將我的所有代碼適應這種令人沮喪的行爲......除非有人已經經歷過這個並且能夠啓發我?
你好ECC-Dan,你是怎麼設法最終解決這個問題的?我面臨同樣的問題,我不想爲每個導航屬性添加ID。 – Khronos
對不起,延遲迴復;我從來沒有解決這個問題,因爲與NHibernate相比,我們實際上最終放棄了對Entity Framework的轉換,因爲這個和其他更嚴重的限制。 –