2009-04-15 72 views
0

所以我正在尝试使用示例应用程序。试图深入研究ADO.NET实体框架。我得到一个雇员的背部采用与LINQ的方法是这样的:ADO.NET Entity Framework,Northwind和Employee.Orders> 0

public IList<Employee> FindByLastName(string lastName) 
    { 
     IList<Employee> emps; 
     var e = from emp in _ctx.Employees where emp.LastName == lastName select emp; 
      emps = e.ToList<Employee>(); 
     return emps; 
    } 

然后在我的单元测试中我有的emps [0] .Orders.Count> 0这回来假的。 所以我的订单属性没有加载。我究竟做错了什么?

UPDATE
你如何融入这个负载()这个有什么想法/包括的东西到存储库模式?

我必须做一些事情跛脚象

public IList<Employee> GetEmployeeById(int id, bool includeOrders) 
{ 

} 
+0

我不认为这是一个通用的最好的方式来做到这一点,而不是说包括命令,我可能会返回懒惰列表,列出 - 第一次使用时,将首先调用Load方法。 – meandmycode 2009-04-15 20:36:56

回答

2

使用Include方法,你可能会更好编写查询少LINQ,如:

public IList<Employee> FindByLastName(string lastName)  
{ 
    return _ctx.Employees 
     .Include("Orders") 
     .Where(emp => emp.LastName == lastName) 
     .ToList(); 
} 
1

您还可以使用的选项一个Include语句来加载你的订单。

public IList<Employee> FindByLastName(string lastName) 
{ 
    IList<Employee> emps; 
    var e = from emp in _ctx.Employees.Include("Orders") where emp.LastName == lastName select emp; 
     emps = e.ToList<Employee>(); 
    return emps; 
} 

这将导致更复杂的联接在SQL的一面,但它确实有一个访问数据库的利益,比负荷记录的小范围()的例子将返回。我会尝试他们两个,看看什么最适合你。