2010-03-06 2 views
1

나는 2 개의 물체를 가지고 있습니다 - 주문과 제품. 주문에서만 productID가 저장되고 주문을 볼 때 제품 이름을보고 싶습니다. ScuttGu 블로그에 따르면이 작업은 Eval ("Product.ProductName")과 함께 템플릿 필드를 사용하여 쉽게 수행 할 수 있습니다. 그러나 실제 쿼리를 검토 할 때 각 주문에 대해 별도의 쿼리가 생성됩니다.외래 키로 인해 더 많은 쿼리가 발생합니까?

많은 행 및/또는 외래 키에 대해 많은 추가 쿼리가 만들어 지므로 나에게 맞는 것은 아닙니다. 이 모든 것을 너무 비효율적으로 만들어주지는 않습니다 (즉, linq에서 조인을 사용하지 않는 이유)? 때문에 평가가 실행 된 시점에서

감사

답변

0

이 발생은 쿼리가 이미이없이 참여했다. -이 필요할 때 그들이로드 당신의 제품은로드 게으른 때문에

var dlo = new DataLoadOptions(); 
dlo.LoadWith<Order>(o => o.Product); 
var dc = new DataContext(); 
dc.LoadOptions = dlo; 

var orders = from dc.Orders select o; 
1

즉 :

당신이 DataLoadOptions를 사용할 수있는 쿼리를 가져 오는하고있는 .LoadWith() method 사용하여이를 포함합니다.

당신은 DataLoadOptions은 fetchingstrategy를 설정하고 주문 제품을로드 할 수 있습니다

MyDataContext db = new MyDataContext(); 
DataLoadOptions options = new DataLoadOptions(); 
options.LoadWith<Order>(order => order.Product); 
db.LoadOptions = options; 
var orders = from c in db.Orders 

당신이 홍보를 좋아하지 않는 경우에. 내 저장소 및 사양 패턴 좋게 동작 this guys fethingstrategies 같은 것을 구현 한

MyDataContext db = new MyDataContext(); 
db.Orders 
    .Select(o => new { Order = o, Products = o.Products}) 
    .ToList() 
    .Select(x => x.Order) 
    .ToList(); 

: loadoptions의 데이터 컨텍스트 사양이 (하지 testet) 그런 짓을.

관련 문제