当前位置: 首页 > 编程语言 > C#

NHibernate和CollectionCount分享

时间:2023-04-10 18:56:32 C#

NHibernate和CollectionCount以下我用NHibernate做持久化的类setpublicclassPerson{publicstringName{get;放;}publicIListSubordinates{get;放;现在假设我有一个包含两列的网格,“名称”和“下属数量”在NHibernate中执行此操作的最佳方法是什么,同时尽可能多地保留对域对象的使用。谢谢,您可以为实例报告/概述创建一个DTO类...此类可能如下所示:publicclassPersonView{publicstringName{get;set;}publicintNumberOfSubordinates{get;set;}}然后,您创建一个Criteria查询,在您定义的Criteria中,您想要检索所有人。但是,您可以指定NHibernate不应返回Person对象,而应返回PersonView对象。为此,您需要使用投影和AliasToBeanTransformer:ICriteriacrit=newCriteria(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类的文件。这看起来像NHibernate然后会为你的标准生成一个非常相似的查询:SELECTp.Name,COUNT(p.Subordinates)FROMPersonINNERJOINSubordinatesONPerson.PersonId=Subordinates.PersonIDGROUPBYp.Name假设你HBM更正为PersonHasManySubordinates,您可以获得Person,如果您只需要计数,则调用Subordinates.Count,这是一个适度浪费的过程,因为它将完全填充所有Subordinates集合以获取计数。我认为您最好创建一个方法,该方法接受一个人并返回其下属的计数,并使用HQL来执行实际的计数功能。如果您不能执行直接计数函数,您可以让每个下属返回一个与PersonFK匹配的值,然后在它返回的集合上调用.Length或.Count。但我假设HQL应该能够直接为您计算它。以上就是C#学习教程的全部内容:NHibernate与收集计数分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: