2011-09-26 5 views
0

내 메서드 호출에서 매개 변수를 전달하려면 (부울 값으로 설정 한 경우) 상태 저장 세션을 반환하십시오.내 메서드에서 매개 변수를 전달하여 상태 비 저장 세션을 사용하여 반환하는 방법은 무엇입니까? 코드 복사 최소화

나는 QueryOver 코드를 복제하지 않으

, 그것을 좋아해야 할 수있는 방법이있다 :

public virtual IList<User> GetAllUsers(bool isStateless) 
{ 

    var query = QueryOver<User>().Where(x => x.UserType == 1).ToList(); 

    if(isStateless) 
    return NHibernateHelper.Session(query); 
    else 
    return NHibernateHelper.StatelessSession(query); 

} 

나는 위의 작동하지 않습니다 알고,하지만 나는 내가 후에 오전 분명한 희망 .

내가 아는 유일한 방법은 기본적으로 전체 쿼리 오버 코드를 복제하는 것이며, 코드 블록간에 유일한 차이점은 사용할 것입니다. Session이고 다른 하나가 사용됩니다. StatelessSession.

깨끗한 방법이 있습니다.

답변

2
var query = QueryOver.Of<User>().Where(x => x.UserType == 1); 

IQueryOver<User, User> executableQuery; 
if(isStateless) 
    executableQuery = query.GetExecutableQueryOver(NHibernateHelper.Session); 
else 
    executableQuery = query.GetExecutableQueryOver(NHibernateHelper.StatelessSession); 

return executableQuery.ToList(); 
+0

GetExecutableQueryOver? – codecompleting

+2

'Session.QueryOveryUser>()'대신'QueryOver.Of ()'을 사용하셨습니까? – Firo

+0

예,'NHibernate.Criterion.QueryOver.Of ();'을 사용해야합니다. – Alex

관련 문제