簡體   English   中英

C#實體框架延遲加載未加載

[英]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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM