我開始懷疑,如果我實際上太愚蠢的使用NHibernate。我目前使用FluentNHibernate來創建簡單的數據庫映射,這對我們來說很好。當單獨處理我們的各種類時,我們能夠讀寫所有這些類,執行更新等。然而,我的問題是試圖建立一個查詢,涉及比對實體類型的字段進行過濾更復雜的任何事情。一個很好的例子被示出below--CreateAlias和NHibernate加入類無w /沒有映射關係
映射的相關部分:
public class UserMap : ClassMap<User> {
Id(u => u.Id).Column("UserID").GeneratedBy.Identity();
//other non-pertinent fields
}
public class RoleMap : ClassMap<Role> {
Id(r => r.Id).Column("RoleId").GeneratedByIdentity();
//snip
}
public class RoleMapMap : ClassMap<RoleMap> {
Id(rm => rm.Id).Column("RoleMapId").GeneratedByIdentity();
Map(rm => rm.UserId);
Map(rm => rm.RoleId);
//snip
}
的目的是生成查詢瓦特/標準API檢索的特定角色的所有用戶 - 在高級別,根據特定角色ID篩選角色映射,然後加入到用戶,並僅返回這些用戶。
嘗試了以下操作,但我對CreateAlias的使用明顯存在缺陷,因爲運行時異常基本上告訴我,它不知道下面的「RoleMap」與User對象有關。
var criteria = session.CreateCriteria<User>().
CreateAlias("RoleMap", "rm").
Add(Expression.Eq("rm.UserId", "UserId")).
Add(Expression.Eq("rm.RoleId", 99)).
SetResultTransformer(new
DistinctRootEntityResultTransformer());
var users = criteria.List<User>();
有人能指出我正確的方向嗎?我不希望編輯底層對象來公開集合 - (例如User.Roles []集合),因爲有些情況下我們特別使用僅用於連接的表,但我們不希望浮動到中間層。所以學習如何參加孤立的課程對我們很重要。
我不認爲你太愚蠢。我認爲nocoa的doco和使用是相當糟糕的。 – Mac 2011-07-06 04:22:16