2010-11-16 5 views
1

в моей организации заказа Я получаю null ref на orderItems. Это происходит, когда заказ сначала создается. Я хотел бы иметь возможность добавить что-то вродеэкземпляр коллекции nhibernate

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

ошибка «не удается получить доступ к защищенному конструктор„Установить“здесь

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

как A Bunch, упомянутый выше.

«Поскольку Iesi.Collections.Set - абстрактный класс, вы будете n чтобы использовать одну из реализаций, таких как 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); 
    } 
5

Set OrderItems в новый список в конструкторе

public Order() { 
OrderItems = new List<OrderItem>(); 
} 
+0

@frosty: Это не имеет ничего общего с nhibernate. Без этой строки вы получите эту ошибку, будь то работа с NH или нет. – UpTheCreek

+0

Извините, я должен был упомянуть, что Set имеет тип Iesi.Collections.Set. Однако я не могу сделать следующее: order.OrderItems = new Iesi.Collections.Set (); ошибка «Невозможно получить доступ к защищенному конструктору« Установить »здесь – frosty

+3

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

Смежные вопросы