2013-06-23 4 views
2

это мой первый раз в NHibernate QueryOver, и я пытаюсь сделать это в общем виде. До сих пор, это то, что я сделал ..NHibernate QueryOver (generic), укажите запрос, какие свойства универсального класса он должен использовать

//Find one only 
public T Find(string propertyName1, string propertyName2, string value1, string value2) 
{ 
    using (var session = sessionFactory.OpenSession()) 
    using (var transaction = session.BeginTransaction()) 
    { 
     return session.QueryOver<T>().Where(d => propertyName1 == value1) 
            .And(f => propertyName2 == value2).SingleOrDefault(); 
    } 
} 

Я не уверен, если это правильно. Я пытаюсь сделать это, используя общий класс, получить объект, сохраненный в базе данных, используя два его свойства.

Как вы можете видеть, я передал свои property1 и property2. Используя эти два свойства, мне интересно, могу ли я запросить мою базу данных, чтобы найти объект, свойства которого имеют те же значения, что и параметры value1 и value2.

Поскольку он является общим, мне нужно найти способ определения моего запроса, какие свойства он должен использовать в качестве критерия. Каков правильный способ сделать это? Спасибо, парни.

+0

благодаря Erik .. всегда забывают выделить переменные: р –

ответ

4

Может быть, вы должны смотреть на Criteria запросов вместо QueryOver: http://docs.huihoo.com/hibernate/nhibernate-reference-1.2.0/querycriteria.html

public T Find(string propertyName1, string propertyName2, string value1, string value2) 
{ 
    using (var session = sessionFactory.OpenSession()) 
    using (var transaction = session.BeginTransaction()) 
    { 
     return session.CreateCriteria(typeof(T)).Add(Expression.Eq(propertyName1, value1)) 
           .Add(Expression.Eq(propertyName2, value2)).SingleOrDefault(); 
    } 
}