どのようにして参加をするのにNhibernateを入手できますか?
-
18-09-2020 - |
質問
私は店や従業員のクラスをフックアップして、店舗と従業員のクラスをつないで使用しました。
public class Store
{
public virtual IList<Employee> Employees { get; set; }
//other store properties
}
public class Employee
{
public virtual Store Store { get; set; }
public virtual bool? SomeStatus1 { get; set; }
}
.
SomeStatus1がTRUEに設定されていない従業員がいるすべての店舗を手に入れる必要があります。
私の寓話の試みは失敗しました:
Session.CreateCriteria(typeof(Store))
.Add(Restrictions.Not(Restrictions.Eq("Employees.SomeStatus1", true))
.List<Store>();
.
私がそれをやっているのでしょうか。
私の試みが失敗した理由は、リストの従業員がSomEStatus1の財産を持っていないためです。これはかなり明白です。
私が知らないのは、私が探している州で従業員を持つ店舗だけを取得するためのNhibernateを手に入れる方法です...
私はNhibernateに参加することを尋ねたいことを考えています...しかし、私はそれをする方法を知らない...
解決
サブ基準を作成することで参加
var criteria = Session.CreateCriteria(typeof(Store));
var join = criteria.CreateCriteria("Employees");
join.Add(Restrictions.Not(Restrictions.Eq("SomeStatus1", true));
return criteria.List<Store>();
.
未テスト(DOV)それがうまくいくことを願っていますが、あなたはその考えを得ます。それは私がN:1でそれをする方法ですが、あなたは1:n
を持っています編集:OK、投稿後に少し研究をしました。私が働くべきコードは、従業員のコレクションのロードを引き起こすようです。同じ基本コードが見つかりました Ayende's Blog 。コレクションをリロードさせることなく同じことをするサンプルがあります。助けを願っています。
他のヒント
試してみてください:
Session.CreateCriteria(typeof(Store))
.CreateAlias("Employees", "e")
.Add(Restrictions.Not(Restrictions.Eq("e.SomeStatus1", true))
.List<Store>();
. 基準APIの代わりにLINQをNHIBERNATE APIに使用することをお勧めします。これにより、クエリは次のとおりです。
var query = Session.Linq<Store>()
.Where(store => store.SomeStatus1 != true);
var result = query.ToList();
.
その他のヘルプここ。
所属していません StackOverflow