Почему NHibernate удаляет и воссоздает все ассоциации в коллекции, когда я добавляю одну пункт к нему?

Я провожу некоторые тесты с использованием NHibernate, и в настоящее время у меня есть два сопоставленных объекта, Заказыи Товары.Как всегда, Orderимеет набор Products, и я отображаю это как:


  
  

И на стороне C#:

public virtual IList Products
{
    get { return _Products; }
    set { _Products = value; }
}
private IList _Products = new List();

В случае, если у меня есть один сохраненный Order(заказ Джона) в базе данных с некоторыми предметами в его коллекции Products(яблоко, апельсин и кокос), и я пытаюсь добавить новый предмет в коллекцию (банан ) Я вижу из вывода SQL, что NHibernate делает что-то вроде этого:

INSERT INTO Products_Table (Product_Name, Product_ID) VALUES ('Banana', @Banana_ID)
DELETE FROM Products WHERE Order_ID = @Johns_Order_ID
INSERT INTO Products (Order_ID, Product_ID) VALUES (@Johns_Order_ID, @Apple_ID)
INSERT INTO Products (Order_ID, Product_ID) VALUES (@Johns_Order_ID, @Orange_ID)
INSERT INTO Products (Order_ID, Product_ID) VALUES (@Johns_Order_ID, @Coconut_ID)
INSERT INTO Products (Order_ID, Product_ID) VALUES (@Johns_Order_ID, @Banana_ID)

Вместо того, чтобы просто делать что-то вроде этого:

INSERT INTO Products_Table (Product_Name, Product_ID) VALUES ('Banana', @Banana_ID)
INSERT INTO Products (Order_ID, Product_ID) VALUES (@Johns_Order_ID, @Banana_ID)

Так почему же NHibernate удаляет все ассоциации из таблицы Products, чтобы воссоздать их опять же, когда я только пытаюсь вставить в него новый продукт? Как этого избежать?

Заранее спасибо!

PS: я попытался использовать атрибут сопоставления inverse, как это предлагается в SO Question, но даже если новый продукт сохраняется, его связь с заказом не сохраняется.

РЕДАКТИРОВАТЬ:

Вот код, который я использую для изменения списка продуктов:

Order order = session.Load(orderId);
order.Products.Add(new Product() { Name = "Banana" });
using (ITransaction transaction = session.BeginTransaction())
{
    session.Update(order);
    transaction.Commit();
}

7
задан Community 23 May 2017 в 12:32
поделиться