У меня есть класс BillMedicine, который является таблицей «многие ко многим» для Билла и Медицины.
Файл сопоставления BillMedicine:
<class name="BillMedicine" table="Bill_Medicine">
<composite-id>
<key-many-to-one name="Bill" class="Bill" column="BillID" />
<key-many-to-one name="Medicine" class="Medicine" column="MedicineID" />
</composite-id>
<version name="LastModifiedOn" column="LastModifiedOn" type="DateTime"
access="field.pascalcase-underscore" />
<property name="Quantity" column="QuantityPurchased" />
</class>
Когда я создаю новый BillMedicine и обновляю количество, мой модульный тест проходит успешно. Однако, если я раскомментирую строку, обновляющую лекарство, я получу исключение NHibernate.StaleObjectStateException: Row was updated or deleted by another transaction
BillMedicineRepository target = new BillMedicineRepository();
BillMedicine billMedicine =
new BillMedicine { Bill = _bill, Medicine = _medicine1, Quantity = 1 };
target.AddBillMedicine(billMedicine);
//billMedicine.Medicine = _medicine2;
billMedicine.Quantity = 2;
target.UpdateBillMedicine(billMedicine); // Exception if I update the medicine
Я проверил SQL, показанный NHibernate, и он не обновляет лекарство
UPDATE Bill_Medicine SET LastModifiedOn = @p0, QuantityPurchased = @p1
WHERE BillID = @p2 AND MedicineID = @p3 AND LastModifiedOn = @p4;
Edit:
Мои вопросы:
1- Почему обновление только количества работает, но обновление лекарства - исключение?
2- Можно ли заставить Nhibernate обновить свойство лекарства? Если да, то как? Если нет, может кто-нибудь предложить обходной путь?