NHibernate组件映射(创建标准)

时间:2011-01-25 14:22:17

标签: nhibernate fluent-nhibernate components mapping

有没有办法为组件创建“别名”? 我有一个“Criteria Builder”,它以“Address.City”(或“User.Address.City”,...)的格式获取字符串,并根据它创建ICriteria(过滤器和排序)。
我正在使用组件映射“地址”类,因此它与“用户”保持在同一个表中。

我得到的例外是:
NHibernate.QueryException无法解析属性:City of:MyNamespace.User

如果我尝试不为地址组件创建“别名”,它就可以正常工作 但是,由于它是一个标准构建器,有没有办法检测“地址”是一个组件并避免调用条件.CreateAlias(“地址”)?有什么工作吗?

This与我的问题相同,但解决方案对我来说不可行(我不会为每个查询手动创建条件)。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您无法为地址创建别名,因为地址不是映射实体。 CreateAliasCreateCriteria之间的唯一区别是前者返回原始Criteria,而后者返回新的Subcriteria。因此,您可以创建Criteria的唯一类是已映射的类。由于组件不是映射类,因此无法围绕它们创建条件。

我唯一的建议是让你的Address类实现像IComponent这样的空描述符接口,或者用自定义ComponentAttribute标记它。然后你的CriteriaBuilder可以检查它创建条件的类是否具有此元数据并忽略它。