2011-01-10 77 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();