2010-05-04 57 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和其他点缀符号。哪里有对关联路径的允许语法的引用?我觉得上面的内容非常接近,只是缺少一些简单的东西。

回答