[英]C# Entity Framework Lazy Loading Isn't Loading
我已經完成了我在Entity和延遲加載上找到的所有讀數,以及其他問題,但是對於我的生活,我無法實現這一點。 這是我的DB的SQL:
CREATE TABLE corporations(
corporationID bigint PRIMARY KEY
);
CREATE TABLE Character(
personID bigint PRIMARY KEY,
corporationID int NOT NULL,
FOREIGN KEY (corporationID) REFERENCES corporations(corporationID)
);
和獲取它的實體代碼( * 從原始編輯,仍然損壞 * ):
DBEntities context = new DBEntities();
public Character Character_GetByID(long CharacterID)
{
context.ContextOptions.LazyLoadingEnabled = true;
Character character = context.Characters.Where(c => c.CharacterID == CharacterID).FirstOrDefault();
return character;
}
所以從我的理解,我應該能夠去
Character char = Character_GetByID(characterID);
Corporation corp = char.Corporation;
存在“char.Corporation”對象,Entity從外鍵正確創建它。 但是當我運行上面的代碼時,“corp”總是返回NULL(即使我確定相關公司在DB中)。
我注意到的一件事是在自動生成的Entity Character對象中,它具有以下功能:
public virtual Corporation Corporation
{
get { return _corporation; }
set
{
if (!ReferenceEquals(_corporation, value))
{
var previousValue = _corporation;
_corporation = value;
FixupCorporation(previousValue);
}
}
}
這看起來很奇怪,因為我認為在延遲加載時,“get”函數會像“if null,嘗試從數據庫中獲取公司”。 任何想法都將受到高度贊賞。
* 編輯 *請求如何配置延遲加載:
在我的Context類中,對於我擁有的每個構造函數
this.ContextOptions.LazyLoadingEnabled = true;
正如您從上面的第一個C#函數中可以看到的那樣,我在函數本身中嘗試將其設置為true,就在查詢之前。
延遲加載是對象上下文(在您的情況下為DBEntities類實例)提供的功能。 因此,僅當實體對象附加到某個DBEntities實例時才會起作用。 完成Character_GetByID方法時,將釋放上下文,分離實體,並且無法執行延遲加載請求。
刪除using語句,就像使用此dbcontext時一樣
using (var context = new DBEntities())
{
...
}//context is disposed here... lazy loading is not possible
使用.Include(x => x.Corporation);
有關加載相關數據的一些信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.