db에 대한 다중 왕복 비용을 들이지 않고 LINQ to SQL 쿼리와 내 도메인 개체에 대한 매핑을 수행하는 데 문제가 있습니다.LINQ to Sql DB 개체 대 도메인 개체 매핑 및 성능
var query1 = from x in db.DBProducts
select new MyProduct
{
Id = x.ProductId,
Name = x.ProductName,
Details = new MyProductDetail
{
Id = x.DBProductDetail.ProductDetailId,
Description = x.DBProductDetail.ProductDetailDescription
}
}
쿼리는 DB에 ONE 라운드 여행을 할 것입니다 : 예를 감안할. 큰! 그러나이 문제는 결국 "GetProductDetails"메서드를 사용하여 위의 메서드와 매우 비슷한 SAME "data object -> domain object"매핑을 수행해야합니다.
맵핑의 일부를 완화하기 위해, 나는 그렇게처럼, 나를 위해 매핑을 수행 할 부분 데이터 객체 클래스를 확장하는 멋진 생각이 될 거라고 생각 :
public partial class DBProduct
{
MyProduct ToDomainObject()
{
return new MyProduct
{
Id = this.ProductId,
Name = this.ProductName,
Details = this.DBProductDetails.ToDomainObject()
};
}
}
public partial class DBProductDetail
{
MyProductDetail ToDomainObject()
{
return new MyProductDetail
{
Id = this.ProductDetailId,
Description = this.ProductDetailDescription
};
}
}
니스!
var query1 = from x in db.DBProducts
select x.ToDomainObject();
이 코드가 더 건조하고 더 쉽게 읽을 다음과 같이 지금, 나는 단순히 쿼리 1 다시 작성할 수 있습니다. 또한 동일한 유형의 매핑을 수행해야하는 다른 쿼리는 매핑에 ToDomainObject() 메서드를 사용하기 만하면됩니다. 그것은 효과가 있지만 비용은 들지 않습니다. 프로파일 러를 통해보고있는 동안 첫 번째 쿼리는 db ONCE를 호출하여 필요한 경우 테이블을 조인합니다. 두 번째 쿼리가 적절하게 참여하지 않아 DB에 여러 번 호출됩니다. 내가하려는 일을 성취 할 수있는 방법이 있습니까 : refactor LINQ to SQL 쿼리로 도메인 객체에 대한 매핑이 DRY (코드 중복 없음)가되도록하려면?
이 줄 잘못 보이는 ... 세부 = this.ToDomainObject은() : 당신이 그것을 시도하면, 당신이 지금과 같은 코드를 볼 확률이 낮다 재귀 적으로! 아마도 당신은 Details = this.DBProductDetail.ToDomainObject()를 의미합니까? –
오, 멋지게 잡으세요! 나는 그것을 반영하기 위해 원래 게시물을 업데이트했습니다. 그래도 내 문제는 해결하지 못합니다. : – tbehunin
+1이 흥미로운 질문으로 인해 더 많은 토론이 생성되지 않았습니다. – fearofawhackplanet