문제

약간 불분명 한 경우 용서해주십시오. NHibernate / LINQ / Lambda 표현식을 시작하는 중입니다. 실제로 무엇을 찾아야할지 모르겠습니다 ...

저는 지난 4 ~ 5 년 동안 .NET 2.0으로 작업 해 왔으며 나 자신 외에는 발전 할 기회가 없었기 때문에 이제 새로운 기술을 배우게되었습니다. :)

많은 블로그와 게시물을 읽고 가능한 한 Repository 패턴을 사용하려는 개인적인 작은 프로젝트를 시작했습니다.

현재 다음 상황에 처해 있습니다.

  • MyProject.Core.dll : 모든 비즈니스 로직을 포함하고 IRepository 계약을 설정하는이 핵심 어셈블리가 있습니다. 리포지토리의 실제 구현에 대해 알지 못하며 IoC를 사용하여 런타임에 해결되므로이 핵심 dll은 NHibernate dll에 대한 참조가 없습니다.
  • MyProject.Data.NHibernate.dll : 저장소의 구현은 NHibernate dll에 대한 모든 필요한 참조가있는이 어셈블리 내에 포함되어 있습니다.

    내 저장소 구현은 다음과 같습니다. 라코 디스

    그래서 내 핵심 dll에서 내 저장소에 대한 참조를 얻고 다음과 같은 작업을 수행 할 수 있습니다. 라코 디스

    잘 작동하는 것 같습니다. 데이터베이스를 쿼리하고 Person 테이블의 모든 행을 반환합니다.

    하지만 이제 제가하고 싶은 것은 술어를 추가하는 것입니다 : 라코 디스

    이것은 잘 작동하지만 물론 일어나는 일은 NHibernate가 먼저 데이터베이스에 모든 행을 반환하도록 쿼리 한 다음 LINQ가 결과를 필터링하여 이름이 "Dave"인 항목 만 반환하는 것입니다.

    인터넷을 통해 찾아 봤지만 구현 방법을 찾지 못했습니다. 예를 들어 NH 세션에 대한 호출을 자주 봤던 것과 같이 구식 인 것 같은 많은 것을 발견했습니다 .Linq () 방법, 내 dll의 모든 것을 살펴 봤는데,이 방법은 어디에도 없습니다 ...

    누군가가 나를 올바른 방향으로 안내해 줄 수 있다면, 아마도 약간의 예나 무언가를 통해 나는 매우 훌륭 할 것입니다.

    감사합니다!

도움이 되었습니까?

해결책

매우 간단합니다.

session.Query<T>() 사용 : 라코 디스

Query<T>NHibernate.Linq 네임 스페이스에있는 확장 메서드입니다.

session.Linq는 더 이상 지원되지 않습니다.버전 3 이전의 NHibernate 용 LINQ 공급자였으며 Query<T>로 대체되었습니다.

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