Вот мой код:
Order order = new Order { ... };
OrderItem item = new OrderItem { ... };
order.Items.Add(item);
item.Order = order;
using(var tran = session.BeginTransaction()) {
session.Save(order);
// Without this, an exception will be thrown: Unexpected row count: 0; expected: 1
// session.Save(item);
tran.Commit();
}
Если я раскомментирую строку session.Save(item)
, она вставит заказ и его элемент. В противном случае генерируется исключение «Неожиданное количество строк: 0; ожидается: 1».
Если я помечу конец many (свойство Items) как inverse = "true", исключение не будет создано, но будет вставлен только Order! Позиция заказа не будет добавлена в БД.
Если я вызываю session.Save(item)
, не вызывая session.Save(order)
, он вставляет и заказ, и его элемент.
Как я могу сохранить заказ и его позиции, не вызывая session.Save(orderItem)
, а только позвонив session.Save(order)
? Спасибо!
Вот мои сопоставления:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Core" assembly="Core">
<class name="Order" table="[Order]">
<id name="Id">
<generator class="assigned" />
</id>
<property name="Name" />
<bag name="Items">
<key column="CategoryId" />
<one-to-many class="Core.OrderItem, Core"/>
</bag>
</class>
<class name="OrderItem">
<id name="Id">
<generator class="assigned" />
</id>
<property name="Title" />
<many-to-one name="Order" column="OrderId" cascade="save-update" not-null="true" />
</class>
</hibernate-mapping>