Лучшая практика для Обработки наборов родительского ребенка NHibernate

Начиная с PHP 5.5, вы можете использовать array_column, чтобы получить массив значений для конкретного ключа, и максимально его.

max(array_column($array, 'Total'))

11
задан Gareth 3 June 2009 в 10:29
поделиться

4 ответа

Я делаю это так, за исключением того, что я не использую свойство для частного списка

private IList<Child> _children
public IEnumerable<Child> Children
{
    get
    {
        return children;
    }
}
2
ответ дан 3 December 2019 в 07:14
поделиться

Это вообще не проблема NHibernate.

Вы должны реализовать метод AddChild. Классы отвечают за их согласованность, поэтому они не должны открывать ничего, что не должно быть доступно. Например, (изменяемый) список детей должен быть скрыт. Предоставление IEnumerable - хорошая идея.

Ваш второй код - хорошая отправная точка. Возможно, вам понадобится еще несколько методов, например RemoveChild или CoundChildren.

10
ответ дан 3 December 2019 в 07:14
поделиться

Я делаю это так:

public class Parent
{
    private ISet<Child> _children = new HashedSet<Child>();

    public ReadOnlyCollection<Child> Children
    {
        get{ return new List(_children).AsReadOnly(); }
    }

    public void AddChild( Child c )
    {
       if( c != null && !_children.Contains (d) )
       {
          c.Parent = this;
          _children.Add (c);
       }
    }
}

Так что, собственно говоря, Стефан тоже немного об этом говорит. Я просто предоставляю копию списка Children только для чтения, чтобы вы могли легко перебирать дочерние элементы родителя и получать количество дочерних элементов, которые есть у родителя. Добавление и удаление дочерних элементов к родительскому элементу должно выполняться с использованием методов-членов AddChild и RemoveChild.

5
ответ дан 3 December 2019 в 07:14
поделиться

Мне не нравятся все дополнительные методы AddXXX () и RemoveXXX () , загромождающие интерфейсы моих сущностей. Вместо этого у меня есть собственный список, который вызывает события при вызове методов Add () и Remove () .

Затем связывание происходит в обработчиках событий:

public class Course()
{
   public Course()
   {
     this.Topics = new EntityList<Topic>();
     this.Topics.AddItem += new AddItemEventHandler<Topic>(Topic_AddItem);
     this.Topics.RemoveItem += new RemoveItemEventHandler<Topic>(Topic_RemoveItem);
   }

   public EntityList<Topic> Topics { get; private set; }

   private void Topic_AddItem(Topic item, object args)
   {
     // Replace with your linking code:
     EntityLinker.Link(this).With(item, args);
   }   

   private void Topic_RemoveItem(Topic item, object args)
   {
     // Replace with your unlinking code:
     EntityLinker.Unlink(this).From(item, args);
   }   
}
-1
ответ дан 3 December 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: