我正在尝试为NHibernate中的类生成一个映射,该映射将映射到手写的查询,以包含不在类映射所涉及的表中的字段。
Id int
Name varchar(50)
Parent int
int Id {get; set;}
string Name {get; set;}
int ParentId {get; set;}
int ChildCount {get; set;}
x => x.Id, "Id"
x => x.Name, "Name"
x => x.Parent, "Parent"
x => x.ChildCount, "ChildCount"
有一个自定义查询返回'ChildCount'作为一个完美映射到类的属性,当该类用于与另一个类的关系并且NHibernate隐式加载该类时会出现问题。有没有办法指定ChildCount映射应该存在,但仅用于将查询绑定到类,而不是自动创建用于直接从数据库加载对象的SQL。
在后一种情况下,NHibernate失败,因为它沿着
行创建了一个SQL查询 SELECT Id, Name, Parent, ChildCount FROM ...
其中对象是作为关系的一部分加载的。
答案 0 :(得分:0)
您可以使用Formula(string formula)
方法映射此属性,并添加sql
子查询来执行此操作,以获取示例:
Map(x => x.ChildCount).Formula("select count(*) from Table where parent=id");
这将导致子查询计算父项的数量,并在父列中传递id。