NHibernate查询字典(map)的键字段

NHibernate查询字典(map)的键字段,nhibernate,Nhibernate,我有一个对象模型,其中Calendar对象有一个名为UserPermissions的IDictionary,其中MembershipUser是一个对象,Perms是一个简单的枚举。这在“日历为”的映射文件中 <map name="UserPermissions" table="CalendarUserPermissions" lazy="true" cascade="all"> <key column="CalendarID"/> <index-many-t

我有一个对象模型,其中Calendar对象有一个名为UserPermissions的IDictionary,其中MembershipUser是一个对象,Perms是一个简单的枚举。这在“日历为”的映射文件中

<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>
这构造了无效的SQL-WHERE子句包含WHERE membership1_u2;Username=@p0,正如预期的那样,但FROM子句不包括MemberhipUsers表


此外,我还必须努力学习.index符号。我通过挖掘NHibernate源代码找到了它,并且看到了.elements和一些其他虚线符号。关联路径的允许语法的引用在哪里?我觉得上面的内容非常接近,只是缺少了一些简单的东西。

我只是尝试自己做这件事,看起来这可以用HQL完成,但不能用Criteria API

要在HQL中执行此操作,请执行以下操作:

请特别注意Ayende的评论:

有点像: 从配置文件p连接p条目e中选择1 其中indexe='HasCats'和e='true'

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>();