NHibernate не сохраняет объект, а также не отображается ошибка

0

У меня проблема с сохранением объекта в базе данных с помощью NHibernate. Программа не выдает ошибки, но запись по-прежнему отсутствует в базе данных. Я также выводя sql-запросы, и запрос не выполняется.

Я использую составной ключ в таблице "order_product". Таблица является дочерним по порядку.

Таблица базы данных: order_product

order_id (PK)
product_id (PK)
count
price

Mapping:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
  <class name="Service.OrderProduct, Service" lazy="true" table="order_product">
    <composite-id>
      <key-property name="productId" column="product_id" type="string"/>
      <key-property name="orderId" column="order_id" />
    </composite-id>
    <property name="count" type="int" column="count" not-null="true" />
    <property name="price" type="double" not-null="true" />
    <many-to-one name="Order"   column="order_id"   fetch="join" cascade="all"/>
  </class>
</hibernate-mapping>

Объект С#:

public class OrderProduct
{
    virtual public OrderProductPK orderProductPK { get; set; }
    virtual public int count { get; set; }
    virtual public string productId { get; set; }
    virtual public int orderId { get; set; }
    virtual public double price { get; set; }
    virtual public Order Order { get; set; }

    public override bool Equals(Object o)
    {

        OrderProduct a = o as OrderProduct;
        if (a.productId.Equals(this.productId) && a.orderId==this.orderId)
        {
            return true;
        }
        return false;
    }
    public override int GetHashCode()
    {
        int hashCode = 0;
        hashCode = hashCode ^ productId.GetHashCode() ^ orderId.GetHashCode();
        return hashCode;
    }
}
public class OrderProductPK
{
    virtual public string productId { get; set; }
    virtual public int orderId { get; set; }

}

Сохранить код:

OrderProduct op = new OrderProduct();
op.order_id= 133;
op.product_id = "product_key_id";
op.price = 20.4;
op.count = 10;
OpenSession().Save(op);
  • 0
    Это выглядит как таблица отношений многих ко многим. Если это так, эта таблица также отображается в другом месте, может быть, неявно в HasMany?
  • 0
    Это правда, что «order_product» является таблицей «многие ко многим», но так как она имеет некоторые дополнительные атрибуты (не только order_id & product_id), я использую только «многие к одному» и «один ко многим» в своем отображении.
Показать ещё 4 комментария
Теги:
visual-studio
nhibernate

3 ответа

0
Лучший ответ

Я решил свою проблему с помощью суррогатного ключа.

1

Вам, вероятно, нужно либо закрыть (Dispose) сеанс, либо сбросить его, чтобы NHibernate записывал изменения в базу данных.

  • 0
    Я пытался с упаковкой кода в транзакции и использовать транзакцию. Commit (); Я также пробовал OpenSession (). Flush (); Но объект все еще не в базе данных.
  • 0
    Сохранение других объектов работает нормально (я пытался сохранить другие объекты до и после кода выше).
Показать ещё 1 комментарий
0

Попробуйте удалить каскад всех на много-к-одному, возможно, даже удалить выборку.

  • 0
    Это не работает, даже если я удаляю <много-к-одному> часть XML-файла. кажется, у меня проблема из-за <составной-ID> ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню