получить количество свойств с сущностью, используя nhibernate - PullRequest
0 голосов
/ 09 марта 2010

Могу ли я надеяться, что кто-то может указать мне правильное направление о том, как подсчитать имущество и объект, используя одну поездку на 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 показывает количество таблиц категории, а не списка статей.

Спасибо

1 Ответ

0 голосов
/ 11 марта 2010

Вы можете использовать несколько запросов, несколько операторов 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];

Может быть, не совсем то, что вы думали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...