簡體   English   中英

實體框架4相關實體未加載

[英]Entity Framework 4 related entity not loading

我使用EF4中的查詢,根據其中的數據通過各種其他方式(不是EF)來回拉記錄和處理信息,因此我經常在列表中分離EF對象。

在這種情況下,即使我使用的是.Include(“ ...”)方法,在EntityFramework 4.0中我也沒有加載相關實體的查詢。

using (MyDBEntities ctx = new MyDBEntities())
{
    ctx.ContextOptions.LazyLoadingEnabled = false;

    // Get the first X records that need to be processed
    var q = (from t in ctx.DBTables
                .Include("Customer")
             let c = t.Customer
             where t.statusID == (int)Enums.Status.PostProcessing
             && c.isActive == true
             select t
            ).Take(batchSize).ToList();

    foreach (DBTable t in q)
    {
        // this results in c == null
        Customer c = t.Customer;

        // However t.CustomerID has a value, thus I know 
        // that t links to a real Customer record
        Console.WriteLine(t.CustomerID);
    }
}

任何人都可以幫助我了解為什么即使我明確聲明要包括客戶,也無法加載客戶?

我找到了問題的根源! 惡魔位於“ let”命令中。 每當我有一個let或第二個“ from”子句(如聯接)時,“。includes”都會被忽略!!!

// -- THIS FAILS TO RETRIEVE CUSTOMER
// Get the first X records that need to be processed
var q = (from t in ctx.DBTables
            .Include("Customer")
         // Using a "let" like this or 
         let c = t.Customer
         // a "from" like this immediately causes my include to be ignored.
         from ca in c.CustomerAddresses
         where t.statusID == (int)Enums.Status.PostProcessing
         && c.isActive == true
         && ca.ValidAddress == true
         select t
        ).Take(batchSize).ToList();

但是,我可以一次調用就獲取需要獲取的ID,然后再進行第二次“獲取我的包含”調用,一切正常。

// Get the first X record IDs that need to be processed
var q = (from t in ctx.DBTables
         let c = t.Customer
         from ca in c.CustomerAddresses
         where t.statusID == (int)Enums.Status.PostProcessing
         && c.isActive == true
         && ca.ValidAddress == true
         select t.TableID
        ).Take(batchSize).ToList();

// Now... go "deep-load" the records I need by ID
var ret = (from t in ctx.DBTables
            .Include("Customer")
           where q.Contains(t.TableID)
           select t);

暫無
暫無

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

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