0
我想構造ICriteria的並將其傳遞給一個函數。該功能將打開一個會話和事務。然後函數執行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(...
注:問題是,我將使用數據表來強類型的對象(與NHibernate兼容)一個巨大的工程。所以我有很多很多的編譯錯誤,這些錯誤阻止我在不轉換整個項目的情況下測試我的代碼。
是啊!而已!它還在參考文獻中聲明:http://nhforge.org/doc/nh/en/ - 「DetachedCriteria類允許您在會話範圍之外創建查詢,然後使用某個任意的ISession執行它。」它實際上太容易了,我應該爲此感到羞恥。我沒有注意到'DetachedCriteria'。感謝指針。 –