создание коллекции nhibernate - PullRequest
2 голосов
/ 16 ноября 2010

в моем объекте заказа я получаю нулевую ссылку на элементы заказа.Это происходит при первом создании заказа.Я хотел бы иметь возможность добавить что-то вроде

order.OrderItems = new Iesi.Collections.Set<OrderItem>();

ошибка "Не удается получить доступ к защищенному конструктору" Set "здесь

    public class Order
    {
        public virtual int Id { get; set; }
        public virtual ISet<OrderItem> OrderItems { get; set; }

        public virtual void AddOrderItem(OrderItem item)
        {
            item.Order = this;
            // OrderItems below is null
            OrderItems.Add(item); 
        }

    }


<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="EStore.Domain"
                   namespace="EStore.Domain.Model">

  <class name="Order" table="Orders">
    <id name="Id" type="Int32" column="Id" unsaved-value="0">
      <generator class="identity"/>
    </id>

    <property name="UserName" column="UserName"/>
    <set name="OrderItems" table="OrderItems" generic="true" cascade="all-delete-orphan"  inverse="true" >
      <key column="OrderId" not-null="true" />
      <one-to-many class="EStore.Domain.Model.OrderItem, EStore.Domain" />
    </set>

  </class>
</hibernate-mapping>

Ответы [ 2 ]

5 голосов
/ 16 ноября 2010

Установить OrderItems для нового списка в конструкторе

public Order() {
 OrderItems = new List<OrderItem>();
}
3 голосов
/ 16 ноября 2010

как группа, упомянутая выше.

"Поскольку Iesi.Collections.Set является абстрактным классом, вам необходимо использовать одну из реализаций, например Iesi.Collections.HashedSet, Iesi.Collections.HybridSet, Iesi.Collections.ListSet или Iesi.Collections.SortedSet"

Я обновил следующий метод. Ключевой частью является "новый HashedSet ();"

 public virtual void AddOrderItem(OrderItem item)
    {
        item.Order = this;
        if (item.Order.OrderItems == null)
        {
            item.Order.OrderItems = new HashedSet<OrderItem>(); 
        }
        OrderItems.Add(item);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...