gpt4 book ai didi

c# - NHibernate 和集合计数

转载 作者:太空狗 更新时间:2023-10-30 00:22:37 24 4
gpt4 key购买 nike

我有以下使用 NHibernate 持久化的类设置

public class Person
{
public string Name { get; set; }
public IList<Person> Subordinates { get; set; }
}

现在假设我有一个包含两列的网格,“名称”和“下属人数”,在 NHibernate 中执行此操作的最佳方式是什么,同时尽可能保留对域对象的使用。

谢谢

最佳答案

您可以创建一个用于报告/概览的 DTO 类,例如...此类可能如下所示:

public class PersonView
{
public string Name{ get;set; }
public int NumberOfSubordinates{get;set;}
}

然后,您创建一个 Criteria 查询,在该 Criteria 中您定义要检索所有人员。但是,您可以指定 NHibernate 不应返回 Person 对象,而应返回 PersonView 对象。为了能够做到这一点,您需要使用投影和 AliasToBeanTransformer:

ICriteria crit = new Criteria(typeof(Person));

crit.SetProjection (Projections.ProjectionList()
.Add (Projections.Property("Name"), "Name")
.Add (Projections.Count ("Subordinates"), "NumberOfSubordinates");

crit.SetResultTransformer(Transformers.AliasToBean (typeof(PersonView));

类似于上面的内容。 (我没有测试你的具体情况)。然后,您只需简单地“导入”此类,让 NHibernate 知道 PersonView 类的存在。我有一个 hbm.xml 文件,我在其中导入所有 DTO 类。这看起来像

<hibernate-mapping .. >
<import class="PersonView" />
</hibernate-mapping>

然后,NHibernate 将为您的 Criteria 生成一个非常类似于以下内容的查询:

SELECT p.Name, COUNT(p.Subordinates) FROM Person
INNER JOIN Subordinates ON Person.PersonId = Subordinates.PersonID
GROUP BY p.Name

关于c# - NHibernate 和集合计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/532483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com