2010-05-04 61 views
1

我有一個對象模型,其中日曆對象有一個名爲UserPermissions的IDictionary<MembershipUser, Perms>,其中MembershipUser是一個對象,而Perms是一個簡單的枚舉。這是在日曆中的映射文件作爲NHibernate查詢字典的關鍵字段(地圖)

<map name="UserPermissions" table="CalendarUserPermissions" lazy="true" cascade="all"> 
    <key column="CalendarID"/> 
    <index-many-to-many class="MembershipUser" column="UserGUID" /> 
    <element column="Permissions" type="CalendarPermission" not-null="true" /> 
</map> 

現在我想執行一個查詢,以找到一個給定的用戶定義的一些權限的所有日曆。許可不相關;我只想要一個給定用戶作爲UserPermissions字典中的鍵存在的日曆列表。我有用戶名屬性,而不是MembershipUser對象。我如何使用QBC(或HQL)構建?以下是我已經試過:

ISession session = SessionManager.CurrentSession; 
ICriteria calCrit = session.CreateCriteria<Calendar>(); 
ICriteria userCrit = calCrit.CreateCriteria("UserPermissions.indices"); 
userCrit.Add(Expression.Eq("Username", username)); 
return calCrit.List<Calendar>(); 

此構造無效的SQL - WHERE子句包含WHERE membership1_.Username = @p0如預期,但FROM子句中不包括MemberhipUsers表。

此外,我真的不得不努力學習.indices表示法。我通過挖掘NHibernate源代碼發現它,並且看到還有.elements和其他點綴符號。哪裏有對關聯路徑的允許語法的引用?我覺得上面的內容非常接近,只是缺少一些簡單的東西。

回答