Я хочу построить ICriteria's и передать это функции. Эта функция откроет сеанс и транзакцию. Затем функция выполняет ICriteria.List(); и возвращает список объектов, например, код ниже.NHibernate: Создать iCriteria без сеанса
Я хочу сделать это, потому что я хочу только написать 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». На самом деле это слишком легко, мне должно быть стыдно спрашивать об этом на SO! То, что я не заметил «DetachedCriteria». Спасибо за указатель. –