2011-01-10 100 views
0

當我在EF模型上執行lunq查詢時,它是否無法獲得子實體?我有一個交易表,它有一個收款人鏈接和一個交易類型實體。此外,每筆交易都有一系列交易行...Linq獲取子項目

但是代碼的波紋管 - 所有的子對象看起來都是NULL,但實際的實體(Date)中的數據似乎沒問題。但在行中:t.account.account_id; ....'account'是NULL。

public static List<AccountTransactionDto> GetTransaction() 
    { 
     var trans = (from t in Db.account_transaction 
        select t).ToList(); 
     List<AccountTransactionDto> al = new List<AccountTransactionDto>(); 

     foreach(var t in trans) 
     { 
      AccountTransactionDto a = new AccountTransactionDto(); 
      a.AccountId = t.account.account_id; 
      a.AccountTransactionId = t.account_transaction_id; 
      a.PayeeId = t.payee.payee_id; 
      a.TransactionDate = t.transaction_date; 
      a.TransactionTypeId = t.z_transaction_type.transaction_type_id; 

      foreach(var tl in t.account_transaction_line) 
      { 
       AccountTransactionLineDto l = new AccountTransactionLineDto(); 
       l.AccountTransactionLineId = tl.account_transaction_line_id; 
       l.Amount = tl.amount; 
       l.BudgetId = tl.budget.budget_id; 
       l.CostCenterId = tl.cost_centre.cost_centre_id; 
       l.SubCategoryId = tl.sub_category.sub_category_id; 
       a.AccountTransactionLine.Add(l); 
      } 

      al.Add(a); 
     } 
     return al; 
    } 

回答

2

你有兩個選擇。您可以通過啓用延遲加載:

Db.ContextOptions.LazyLoadingEnabled = true; 

或者,如果你改變了查詢行本(確切的語法可能是不正確的包括):

var trans = (from t in Db.account_transaction 
      select t).Include("account_transaction.account_transaction_line"); 

那麼就應該回拉子記錄在單個結果集中記錄父記錄。但是,如果數據量很大,這會導致性能損失。

2

需要在數據上下文中啓用延遲加載。

Db.ContextOptions.LazyLoadingEnabled = true; 

,或者你需要明確地告訴EF加載關聯。即

var trans = (from t in Db.account_transaction.Include('account').Include('payee') select t).ToList();