使用nhibernate获取实体的属性计数

时间:2010-03-09 16:42:10

标签: nhibernate fluent-nhibernate

我是否希望有人可以指出我如何使用一次性访问sql来获取属性和实体的计数方向。

 public class Category
    {
        public virtual int Id { get; private set; }
        public virtual string Description { get; set; }
        public virtual IList<Article> Articles { get; set; }
        public virtual int ArticlesCount { get; set; }

        public Category()
        {
            Articles=new List<Article>();

        }



        public virtual void AddArticle(Article article)
        {
            article.Category = this;
            Articles.Add(article);
        }
        public virtual void RemoveArticle(Article article)
        {
            Articles.Remove(article);
        }

    }

     public class CategoryMap:ClassMap<Category>
        {
            public CategoryMap()
            {

                Table("Categories");
                Id(x => x.Id).GeneratedBy.Identity();
                Map(x => x.Description);
               HasMany(x => x.Articles).KeyColumn("CategoryId").Fetch.Join();
                Cache.ReadWrite();
            }

        }

我的目标是获取所有类别和相关文章的计数(如果有的话)。 我试过这个

ICriteria crit = session.CreateCriteria(typeof(Category));
 crit.SetProjection(Projections.ProjectionList()                     
 .Add(Projections.Property("Description"), "Description")
 .Add(Projections.Count("Articles"), "ArticlesCount"));
 crit.SetResultTransformer(Transformers.AliasToBean (typeof(Category)));
                    var aa=crit.List();

遗憾的是,生成的sql显示了Category表的计数而不是Article列表。

由于

1 个答案:

答案 0 :(得分:0)

您可以使用多个查询,多个sql语句,但这是一次数据库之旅。

以下是nhibernate文档中的示例: https://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/performance.html

IMultiQuery multiQuery = s.CreateMultiQuery()
    .Add(s.CreateQuery("from Item i where i.Id > ?")
            .SetInt32(0, 50).SetFirstResult(10))
    .Add(s.CreateQuery("select count(*) from Item i where i.Id > ?")
            .SetInt32(0, 50));
IList results = multiQuery.List();
IList items = (IList)results[0];
long count = (long)((IList)results[1])[0];

也许不完全是你在想什么。