나는 가입을하기 위해 nhibernate를 어떻게 얻을 수 있습니까?
-
18-09-2020 - |
문제
저는 유창한 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();
.
더 많은 도움말 여기 .
제휴하지 않습니다 StackOverflow