2013-12-13 1 views
1

나는 고객주문 테이블을 가지고 있습니다. Order 테이블에는 CustomerID가이고 Customer.Id가 인 열이 있습니다. 나는탐색 개체가 null입니다. 왜?

var order = (from a in context.Order 
where a.id == OrderId select a).FirstOrDefault(); 

또한 고객 ID 열이 다른 감사 테이블이 다음 사용하여 주문을 검색하고 있습니다. 감사 테이블에 항목을 만들고 위의 쿼리에서 CustomerId를 가져 오려하지만 order.customer 개체가 null입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

var order = (from a in context.Order 
where a.id == OrderId select a).FirstOrDefault(); 
var customer = context.Customer.Find(order.CustomerId); 
+0

id == OrderId 인 주문이 있는지 확인하십시오. 주문 하시겠습니까? – Valin

+0

'OrderId'의 값을 확인하고 실제로'OrderId'에 의해 지정된 ID로 주문이 있는지 확인하십시오. 엔티티 프레임 워크가 아닌 데이터베이스 도구를 사용하여 두 번째 부분을 수행하십시오. –

+0

EF가 DataAnnotations 또는 FluentAPI를 사용하도록 하시겠습니까? – joelmdev

답변

3

CustomerID 필드가있는 Order 엔티티에 Customer 탐색 속성이있는 것으로 추측됩니다. Include 함수를 사용하여 Customer 엔티티를 명시 적으로로드해야합니다.

var order = (from a in context.Order.Include("Customer") 
where a.id == OrderId select a).FirstOrDefault(); 

// Check if the result is null 
if(order != null) 
{ 
    /// Do stuff... 
} 
0

는 솔루션입니다.

var order = (from a in context.Order 
      where a.id == OrderId select a) 
            .Include(b => b.Customer) 
            .FirstOrDefault(); 

그러나 작동하려면 주문과 고객 사이에 링크가 있어야합니다.

+0

이 대답은 효과가 있지만 데이터베이스로 두 번 이동합니다. – paqogomez

3

은 아래 코드와 같은 테이블을 포함 할 것이다 고객 데이터를 포함하기 : 여기

+0

+1. 여전히 'null'을 반환하면 엔티티 자체를 확인하는 것이 좋습니다. 'FirstOrDefault()'는 아무것도 발견되지 않으면'null'을 리턴한다는 것을 기억하십시오. – Tico

+0

실제로 Include는 위의 구문에 포함 된 옵션이 아닙니다. 그러나 컨텍스트 뒤에 포함을 사용할 수 있습니다. @DaveB가 그의 응답에서 제안한대로 주문하십시오. –