nhibernate lambda 확장자는 DetachedCriteria에서 별명 쿼리를 사용할 수 없습니다.
-
20-09-2019 - |
문제
나는 다수의 협회이기 때문에 별칭이 필요한 간단한 쿼리를 작성하려고하지만 NH Lambda 확장자와 함께 작동하지는 않습니다. 문서와 온라인에서 본 모든 예제와 정확히 동일하다고 말할 수있는 한 항상 컴파일 오류를 제공합니다.
공장
var query = DetachedCriteria.For<County>()
.CreateCriteria("Zips", "zipAlias", JoinType.LeftOuterJoin)
//.CreateCriteria<County>(x => x.Zips,
// () => zipAlias, JoinType.LeftOuterJoin)
.Add<Zip>(zip => zip.ZipCode == zipCode);
작동하지 않습니다
var query = DetachedCriteria.For<County>()
//.CreateCriteria("Zips", "zipAlias", JoinType.LeftOuterJoin)
.CreateCriteria<County>(x => x.Zips,
() => zipAlias, JoinType.LeftOuterJoin)
.Add<Zip>(zip => zip.ZipCode == zipCode);
빌드를 초래합니다 Error 22 The name 'zipAlias' does not exist in the current context
Intellisense는 또한 CreateCriteria **를 강조합니다.<County>
**이 방법을 이해하지 못하지만 파렌 내부에있을 때 매개 변수 이름을 올바르게 표시합니다.
해결책
그만큼 선적 서류 비치 편리한 사례로 가득합니다.
당신의 zipAlias
로컬 범위의 변수 여야합니다.
Zip zipAlias = null;
string zipCode = "";
var query = DetachedCriteria.For<County>()
.CreateCriteria<County>(x => x.Zips, () => zipAlias, JoinType.LeftOuterJoin)
.Add<Zip>(zip => zip.ZipCode == zipCode);
렌더링 대신 문서 링크가 다운로드되면 일부 섹션을 복사했습니다.
별명과의 기준 연관성을 만듭니다
원래 iCRiteria API 사용 :
ICriteria before = CreateSession()
.CreateCriteria(typeof(Person))
.CreateCriteria("Children", "childAlias")
.Add(Restrictions.Eq("Nickname", "test"));
nhibernate lambda 확장 사용 :
Child childAlias = null;
ICriteria after = CreateSession()
.CreateCriteria(typeof(Person))
.CreateCriteria((Person p) => p.Children, () => childAlias)
.Add<Child>(c => c.Nickname == "test");
별명과 ALIAS 및 JING 유형의 기준 별명 연관성을 만듭니다
원래 iCRiteria API 사용 :
ICriteria before = CreateSession()
.CreateCriteria(typeof(Person), "personAlias")
.CreateCriteria("personAlias.Children", "childAlias", JoinType.LeftOuterJoin)
.Add(Restrictions.Eq("Nickname", "test"));
nhibernate lambda 확장 사용 :
Person personAlias = null;
Child childAlias = null;
ICriteria after = CreateSession()
.CreateCriteria(typeof(Person), () => personAlias)
.CreateCriteria(() => personAlias.Children, () => childAlias, JoinType.LeftOuterJoin)
.Add<Child>(c => c.Nickname == "test");
별칭 및 조인 유형과의 기준 연관성을 만듭니다
원래 iCRiteria API 사용 :
DetachedCriteria before =
DetachedCriteria.For<Person>()
.CreateCriteria("Children", "childAlias", JoinType.LeftOuterJoin)
.Add(Restrictions.Eq("Nickname", "test"));
nhibernate lambda 확장 사용 :
Child childAlias = null;
DetachedCriteria after =
DetachedCriteria.For<Person>()
.CreateCriteria((Person p) => p.Children, () => childAlias, JoinType.LeftOuterJoin)
.Add<Child>(c => c.Nickname == "test");
제휴하지 않습니다 StackOverflow