NHibernate组件映射(创建标准)

NHibernate组件映射(创建标准),nhibernate,fluent-nhibernate,components,mapping,Nhibernate,Fluent Nhibernate,Components,Mapping,有没有办法为组件创建“别名”? 我有一个“标准构建器”,它以“Address.City”(或“User.Address.City”…)的格式接受字符串,并基于它创建一个ICriteria(过滤器和排序)。 我使用组件映射“Address”类,使其与“User”保持在同一个表中 我得到的例外是: NHibernate.QueryException无法解析属性:城市:MyNamespace.User 如果我尝试不为地址组件创建“别名”,它就可以正常工作。 但是,由于它是一个标准生成器,是否有一种方法

有没有办法为组件创建“别名”?
我有一个“标准构建器”,它以“Address.City”(或“User.Address.City”…)的格式接受字符串,并基于它创建一个ICriteria(过滤器和排序)。
我使用组件映射“Address”类,使其与“User”保持在同一个表中

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

如果我尝试不为地址组件创建“别名”,它就可以正常工作。
但是,由于它是一个标准生成器,是否有一种方法可以检测“地址”是一个组件并避免调用标准?有工作吗

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


任何帮助都将不胜感激

无法为地址创建别名,因为地址不是映射实体。
CreateAlias
CreateCriteria
之间的唯一区别在于前者返回原始标准,而后者返回新的子标准。因此,您只能为已映射的类创建条件。由于组件不是映射类,因此无法围绕它们创建条件


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

您可以发布一些代码吗?@Yads-我现在实际上没有代码。它应该很简单,因为“User”类通过属性引用“Address”类。在用户映射中,我将“地址”作为一个组件。请看,因为它与我的问题非常相似。谢谢我认为使用反射来检查属性太昂贵了(我的起点是字符串“Address.City”)。除非你另有打算?在这种情况下,“空描述符”有什么帮助?你能发一些代码吗?我所需要的只是CreateAlias足够聪明,可以检测类是否是组件,或者一个可以告诉我…=/谢谢你的帮助@Frederico,如果没有看到你的代码,我不能完全确定你的CriteraIbulder是如何工作的。如果(objToMap是IComponent)//不要调用CreateAlias,也许您可以执行类似于
if的检查