없이 iCriteria을 만듭니다. 이 함수는 세션과 트랜잭션을 엽니 다. 그런 다음이 함수는 ICriteria.List()를 실행합니다. 아래 코드와 같이 객체 목록을 반환합니다.NHibernate에 : 나는 <em>ICriteria의</em>을 구성하고 함수에 그에 전달하려는 세션
오브젝트 목록을 수집하기 위해 using(ISession Session = ...
과 Using(ITransaction Transaction = ...
을 한 번만 써야하기 때문에이 작업을 수행하려고합니다. 그렇지 않으면 나는 여러 번 반복하고있다.
/// <summary>
/// Executes a ICriterion in a new session using a transaction.
/// </summary>
/// <typeparam name="T">The type of object to operate on.</typeparam>
/// <param name="Criterion">The criterion to get the list of objects by.</param>
/// <returns>The result of <c>(List<T>)Session.CreateCriteria(typeof(T)).Add(Criterion).List()</c></returns>
public static List<T> CriterionToList<T>(ICriterion Criterion)
{
List<T> Objects = default(List<T>);
using (ISession Session = SessionFactory.OpenSession())
{
using (ITransaction Transaction = Session.BeginTransaction())
{
Objects = (List<T>)Session.CreateCriteria(typeof(T)).Add(Criterion).List<T>();
Transaction.Commit();
}
}
return Objects;
}
ICriteria.Add()가 허용하는 유일한 것은 ICriterion
입니다.
[질문
ICriterion
이없는 .Add(..
그래서 이 수행 할 수 없습니다 난 아직도이를 어떻게
ICriterion criterion = Restrictions.Eq(Property, Value).Add(...
을해야 내가 처음처럼 ICriteria
에 캐스팅 그래서?
ICriterion criterion = ((ICriteria)Restrictions.Eq(Property, Value)).Add(...
참고 :이 문제는 내가 강한 타입의 객체에 DataTables (자 NHibernate와 호환)를 사용하는 거대한 프로젝트를 변환하고 있다는 점이다. 그래서 나는 전체 프로젝트를 먼저 변환하지 않고 코드를 테스트하지 못하게하는 많은 컴파일 오류를 가지고 있습니다.
아 그래! 그게 다야! http://nhforge.org/doc/nh/en/ - "DetachedCriteria 클래스를 사용하면 세션 범위 밖에서 쿼리를 생성 한 다음 나중에 임의의 ISession을 사용하여 쿼리를 실행할 수 있습니다." 그것 실제로 너무 쉽게, 나는 이것을 요구하는 것을 부끄럽게 생각해야한다! 나는 Detached Criteria를 알지 못했다. 포인터 주셔서 감사. –