3

誰かが nhibernate の基準の例を手伝ってくれるかどうか疑問に思っていました。フィールドが特定の値に一致する特定のテーブル内のレコードを見つけるなど、かなり基本的なことについて頭を悩ませていると思います。現在つまずいているのは、別のテーブルの外部キーを持つテーブルがある場所です。 2 番目のテーブルのフィールドに基づいて、最初のテーブルから行を検索しようとしています。

例として...

私が持っている場合

tblUser
pk int    ID
   int    CompanyID
   string Name

tblCompany
pk int     ID
   string CompanyName

特定の名前を持つ会社に属するすべてのユーザーを取得する基準を作成するにはどうすればよいですか? 適切なマッピング ファイル/オブジェクトを作成する方法は理解していると思いますが、基準を初期オブジェクトのサブプロパティに対して表示する方法がわかりません。

どんな例でも素晴らしいでしょう。

4

1 に答える 1

10

基準はサブプロパティを直接見ることができないため、サブプロパティにアクセスする場合はエイリアスを使用する必要があります

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

また、ネストされたプロパティに対する同じ制限がエイリアスにも存在するため、ユーザー -> 会社 -> 所有者の場合、2 つのエイリアスが必要になります。

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

また、クエリ全体にエイリアスを使用する場合は、基準を作成するときにルート エンティティにもエイリアスを指定できます。

session.CreateCriteria<User>("u")
    .CreateAlias("u.Company", "c")
    .Add(Restrictions.Eq("c.Name", companyName))
    .List<User>();
于 2009-09-04T18:23:40.297 に答える