문제

저는 유창한 Nhibernate를 사용하여 상점과 직원 클래스를 연결하여 상점에서 다음과 같이 많은 직원을 가질 수 있습니다 :

public class Store
{
    public virtual IList<Employee> Employees { get; set; }
    //other store properties
}

public class Employee
{
    public virtual Store Store { get; set; }   
    public virtual bool? SomeStatus1 { get; set; }
}
.

somestatus1이 true로 설정되지 않은 직원이있는 모든 상점을 얻을 필요가 있습니다.

내 fable 시도가 실패했습니다 :

Session.CreateCriteria(typeof(Store))
    .Add(Restrictions.Not(Restrictions.Eq("Employees.SomeStatus1", true))
    .List<Store>();
.

어떻게 그 일을하는지 어떻게 생각합니까?

목록 직원이 SomeStatus1의 재산이 없기 때문에 나의 시도가 실패한 이유는 상당히 명백합니다.

제가 알지 못하는 것은 내가 찾고있는 주에서 직원이있는 상점 만 얻기 위해 닌자를 얻는 방법입니다 ...

나는 내가 묻는 것을 원하는 것을 생각하고 있다고 생각한다.하지만 나는 그것을 할 수있는 방법을 모른다 ...

도움이 되었습니까?

해결책

하위 기준을 작성하여 가입

var criteria = Session.CreateCriteria(typeof(Store));
var join = criteria.CreateCriteria("Employees");
join.Add(Restrictions.Not(Restrictions.Eq("SomeStatus1", true));
return criteria.List<Store>();
.

테스트되지 않은 (OBV) 희망이 작동하지만, 당신은 아이디어를 얻습니다.그것이 내가 n : 1로 그것을하는 방법입니다. 그러나 1 : n

편집 : OK, 게시 후 약간의 연구를했습니다.제가 일해야했던 코드가있는 것으로 보이지만 직원 컬렉션을로드하는 것으로 보입니다. Ayende의 블로그 에서 동일한 기본 코드가 있습니다....에컬렉션을 다시로드하지 않고도 똑같은 샘플이 있습니다.희망이 도움이되기를 바랍니다.

다른 팁

시도 :

Session.CreateCriteria(typeof(Store))
.CreateAlias("Employees", "e")
.Add(Restrictions.Not(Restrictions.Eq("e.SomeStatus1", true))
.List<Store>();
.

Criteria API 대신 LINQ를 NHibernate API로 사용하는 것이 좋습니다.그것으로 쿼리는 다음과 같습니다.

var query = Session.Linq<Store>()
    .Where(store => store.SomeStatus1 != true);

var result = query.ToList();
.

더 많은 도움말 여기 .

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