【发布时间】:2010-05-04 22:19:59
【问题描述】:
我有一个对象模型,其中日历对象有一个名为 UserPermissions 的 IDictionary<MembershipUser, Perms>,其中 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>
现在我想执行一个查询来查找给定用户定义了某些权限的所有日历。许可无关紧要;我只想要一个给定用户作为 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 和其他一些虚线符号。对关联路径的允许语法的引用在哪里?我觉得上面的内容非常接近,只是缺少一些简单的东西。
【问题讨论】:
标签: nhibernate