2009-09-04 15 views
3

誰かがnhibernateのサンプル基準を手助けできるかどうか疑問に思っていました。私はかなりの基本的なことを頭に入れていると思います。特定のテーブルのレコードを特定の値に一致させるなど、私は現在別のテーブルの外部キーを持つテーブルを持っています。第2のテーブルのあるフィールドに基づいて第1のテーブルから行を見つけることを試みる。一例として、基準ビルドnhibernate

...

私は

tblUser 
pk int ID 
    int CompanyID 
    string Name 

tblCompany 
pk int  ID 
    string CompanyName 

を持っている場合はどのように特定の名前を持つ会社に所属するすべてのユーザーを取得するための基準を構築します?私は適切なマッピングファイル/オブジェクトを構築する方法を理解していると思う、私はちょうど最初のオブジェクトのサブプロパティに対して基準を見せる方法を見つけることができません。

いずれの例も素晴らしいと思います。あなたは、サブプロパティにアクセスしたい場合は、別名

session.CreateCriteria<User>() 
    .CreateAlias("Company", "c") //the first argument is the property name from User 
    .Add(Restrictions.Eq("c.Name", companyName)) 
    .List<User>(); 

を使用する必要があるので、

答えて

10

のcriteriasは、直接サブプロパティを見ることができません。また、ネストされたプロパティに同じ制限が別名のために存在し、あなたがユーザーを持っていたので、もし - >会社は - >所有者、あなたが全体のクエリのエイリアスを使用することを好む場合の基準を作成するときに、同様のルートエンティティにエイリアスを与えることができ、また、2つのエイリアス

.CreateAlias("Company", "c") 
.CreateAlias("c.Owner", "o") 

が必要になります。

session.CreateCriteria<User>("u") 
    .CreateAlias("u.Company", "c") 
    .Add(Restrictions.Eq("c.Name", companyName)) 
    .List<User>(); 
+1

私の男はチャンピオンであり、完璧に働いています。 – Adam

+0

答えをくれてありがとう、KeeperOfTheSoul!あなたは私にいくつかの時間を救った。私はおそらく5つが高いので、あなたの腕が前腕と男の子にぴったりなので、きれいにすることが難しいので、あなたは私と一緒にいないのが良いことです。もう一度、助けてくれてありがとう! – SquidScareMe

関連する問題