2009-04-15 3 views
0

그래서 샘플 응용 프로그램에서 작업하려고합니다. ADO.NET Entity Framework를 파헤 치려고합니다. 나는이 같은 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; 
    } 

그런 다음 내 단위 테스트 중 하나에 나는 한 EMP가 [0] .Orders.Count> 0이 다시 거짓 온다. 그래서 Orders 속성이로드되지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

UPDATE :이 하중()로이 통합 방법에 대한
어떤 생각이/저장소 패턴으로 물건을 포함?

내가

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

} 
+0

나는 이것을 포함하는 일반적인 최선의 방법이라고 생각하지 않는다. 포함 명령을 말하는 것이 아니라, 아마 처음에 사용했을 때 처음에 덮개 아래에있는 Load 메서드를 호출하는리스트를 나태 목록으로 반환 할 것이다. – meandmycode

+0

좋아요 ... 블로그 포스트에서 게으른 목록에 대해 이야기하는 사람을 보았습니다. 저는 평범한 목록을 게으른 것으로 교체하기 위해 Employee에서 상속해야 할 것 같습니다. – BuddyJoe

+0

엔티티 프레임 워크가 정의한 Employee 클래스와 관련이없는 Employee 클래스가 있어야하고 리포지토리에 매핑해야합니다. 또한 모델 목록을 변경하는 것에 대해 걱정할 필요가 있으며 이러한 변경 사항이 어떻게 다시 모델에 반영되는지에 대해 걱정할 필요가 있습니다. – meandmycode

답변

2

사용 Include 방법 같은 절름발이 뭔가를해야합니까, 당신은 같은 쿼리 적은 LINQ를 작성하는 더 좋을 수 있습니다

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

당신은 또한 사용할 수있는 옵션이 Orders를로드하기위한 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 측에서 가입하지만 데이터베이스에 하나의 여행의 혜택과 부하보다 기록의 작은 범위를 가지고있다() 예 반환합니다. 나는 그들 모두를 시도하고 당신을 위해 가장 적합한 것을 보았습니다.