2012-06-20 1 views
1

LinqPad에서 EF 4.3 응용 프로그램으로 똑같은 쿼리를 복사하여 붙여 넣기 때문에 똑같은 데이터베이스를 가리키고 다른 결과를 얻습니다. LinqPad에서는 2 개의 레코드가 반환됩니다. 응용 프로그램에서 "객체 참조가 객체의 인스턴스로 설정되지 않았습니다."라는 오류가 발생합니다. 우리가 외부 조인을 제거 할 때 응용 프로그램 코드에서 LINQ/LinqPad : 동일한 쿼리가 서로 다른 결과를 나타냅니다.

 var Shippings = shippingRepository.All.ToArray(); 
     var SalesOrderHeaders = salesOrderHeaderRepository.All.ToArray(); 
     var Customers = customerRepository.All.ToArray(); 
     var Stores = storeRepository.All.ToArray(); 
     var Departments = departmentRepository.All.ToArray(); 

     var toShip = from sh in Shippings 
        join h in SalesOrderHeaders on sh.OrderId equals h.SalesOrderHeaderId 
        join c in Customers on h.CustomerId equals c.CustomerId 
        join st in Stores on h.StoreId equals st.StoreId 
        join d in Departments on h.DepartmentId equals d.DepartmentId into outer 
        from o in outer.DefaultIfEmpty() 
        select new 
        { 
         OrderId = sh.OrderId, 
         CustomerName = c.Name, 
         StoreName = st.Name, 
         DepartmentName = (o.Name == null) ? o.Name : "None", 
         DeliveryDate = h.DeliveryDateTime 
        }; 

(부서를 추가하는) 그리고 쿼리가 LinqPad에서 ASN의 같은 2 개 레코드를 반환 필드 연관된.

누구든지이 기능을 수정하는 방법에 대한 통찰력이 있습니까?

+1

나는 LINQPAd를 사용한 적이 없기 때문에 이것은 어둠 속에서 촬영 된 것이지만, LinqPad가 Linq를 Entity와는 반대로 Linq를 사용하는 것이 가능한가? –

+0

자신 만의 datacontext 나 ​​LinqPad에서 생성 한 데이터 카드를 사용 했습니까? –

+0

한 가지주의 할 점은 각 저장소에서 'ToArray'를 호출하면 모든 조인이 SQL Server가 아닌 클라이언트 쪽에서 발생한다는 것입니다. 이것은 매우 느릴 것입니다. –

답변

3

클릭 당신은 POCO은 시나리오에 따라와 엔티티 프레임 워크의 데이터 컨텍스트 또는 엔티티 프레임 워크 BDContext를 선택할 수 있습니다 enter image description here
같은 어셈블리에서 linqpad에서 "연결을 추가"데이터 컨텍스트를 선택합니다. 다음을 클릭하고 어셈블리 문자열을 연결 문자열과 함께 제공하면 도움이 될 것입니다.

0

LINQPad에서 실제로 엔티티 모델에 대해 쿼리하고 있습니까? 그렇지 않다면 this link을보십시오. 밖으로 시작할 때 비슷한 문제가 있었고 이전에 SQL 연결에 대한 기본 LINQ를 설정하고이를 쿼리하고 있음을 알지 못했습니다. 에