문제

Linq-to-SQL을 사용하여 일부 데이터를 미리 가져오고 싶습니다.

1) 일반적인 해결책은 다음을 처리하는 것입니다. 데이터로드옵션, 하지만 내 아키텍처에서는 다음과 같은 이유로 작동하지 않습니다.

  • 첫 번째 쿼리 전에 옵션을 설정해야 합니다.
  • IOC를 사용하고 있으므로 DataContext를 직접 인스턴스화하지 않습니다(인스턴스화 시 코드를 실행할 수 없습니다).
  • 내 DataContext는 웹 요청 기간 동안 지속됩니다.

2) 나는 다음을 바탕으로 또 다른 가능성을 보았습니다. 로드 중 그만큼 데이터와 그 하위 항목 메서드에서 데이터만 반환(따라서 자식은 이미 로드됨) 여기에서 예를 참조하세요

그럼에도 불구하고 내 아키텍처에서는 작동하지 않습니다.

  • 내 쿼리는 내 저장소에서 계단식으로 전달되며 조항을 추가하는 많은 서비스에서 사용될 수 있습니다.
  • 저는 인터페이스로 작업합니다. linq-to-sql 개체의 구체적인 인스턴스는 리포지토리를 떠나지 않습니다(예, 인터페이스로 작업하고 절을 추가할 수 있습니다).
  • 내 저장소는 일반적입니다

예, 이 아키텍처는 상당히 복잡하지만 레고처럼 코드를 가지고 놀 수 있어서 매우 멋집니다.)

내 질문은 다음과 같습니다무엇입니까? 다른 가능성 데이터를 미리 가져오려면?

도움이 되었습니까?

해결책

내 앱에서는 아마도 잠재적 솔루션 #2의 변형을 사용합니다. 설명하기가 다소 어렵지만 간단하게 : 나는 내 모델에서 관습으로 게으른 로딩을 연기하고 연기합니다. 게으른 수업 linqtosql-specific에서 내가 활용하는 다른 실행에서 멀리 떨어져서 IQueryable. 이익:

  • 내 도메인 모델 및 서비스 계층 상향 반드시 LinqToSQL 제공 업체에 의존 할 필요는 없습니다 (원하는 경우 DAL을 인터페이스로 교체 할 수 있습니다).
  • 내 서비스 방법은 특정 게으른로드 구현을 추상화하는 클래스를 사용하여 게으른로드를 위해 여러 '앵커 포인트'가있는 완전한 객체 그래프를 반환 할 수 있습니다. 인용하다 이 답변)
  • 나는 유지할 수 있습니다 IQueryable 내 앱 전체의 결과 (내가 원하는 경우 UI에도 불구하고) 성능에 대해 걱정할 필요없이 무한 LINQ 쿼리 체인을 허용합니다.

다른 팁

나는 다른 가능성을 알지 못합니다. LinqToSQL을 한계로 밀어 넣은 것 같습니다 (그러나 잘못 될 수 있습니다).

이 시점에서 최선의 옵션은 다음과 같습니다.

  1. 애플리케이션에 몇 가지 "비 게릭"메소드를 추가하여 열망하는로드를 원하거나 필요로하는 특정 시나리오 만 처리하고 해당 방법의 "정상", "일반"인프라를 사용하지 않습니다.
  2. 열망하고 게으른 적재에 대한보다 정교한 지원을받는 ORM을 사용하십시오.

해결책을 찾았습니다.내 대답은 '의존성 주입'.

일반적으로 IOC와 함께 제공되며 IOC 컨테이너가 인스턴스화 시 클래스 주입을 관리하도록 할 수 있음을 의미합니다.

나에게 필요한 것은 주사하는 것뿐이다. CustomDC매개변수 DC를 인스턴스화할 때 클래스입니다.해당 클래스에는 규칙이 포함되며 생성자는 규칙을 모두 적용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top