2009-09-04 76 views
3

我想知道是否有人可以幫助以nhibernate爲例。我想我已經掌握了相當基本的東西,比如在給定的表中找到記錄,這些記錄的字段與某個值相匹配等等。我現在正在跳槽的地方是有另一個表的外鍵的表,以及試圖根據第二個表中的某個字段從第一個表中查找行。Criteria building nhibernate

舉個例子...

如果我有

tblUser 
pk int ID 
    int CompanyID 
    string Name 

tblCompany 
pk int  ID 
    string CompanyName 

我將如何建立標準,以檢索屬於公司具有特定名稱的所有用戶?我想我知道如何構建適當的映射文件/對象,但我無法弄清楚如何使標準與初始對象的子屬性相對照。

任何例子都很棒。

回答

10

規定 - 不能看着直接子屬性,因此,如果您要訪問一個子屬性,你需要使用一個別名

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

此外,在嵌套的屬性相同的限制存在別名,所以,如果你有用戶 - >公司 - >業主則需要兩個別名

.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 2009-09-04 18:44:26

+0

感謝您的回答,KeeperOfTheSoul!你節省了我一些時間。你不和我在一起是件好事,因爲我可能高高地站在你的前面,你的手臂會在前臂和男孩身上發生,這會讓你感到一團糟。再一次感謝你的幫助! – SquidScareMe 2011-05-03 19:10:42