J'ai une classe, BillMedicine, qui est une table plusieurs-à-plusieurs pour Bill et Medicine. Le fichier de mappage BillMedicine est:Modification d'une partie d'un ID composite
<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>
Lorsque je crée une nouvelle BillMedicine et mettre à jour la quantité mon test unitaire réussit. Toutefois, si je décommentez la ligne qui met à jour la médecine, je suis arrivé à l'exception 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
J'ai vérifié le SQL montré par NHibernate et ce ne sont pas la mise à jour de la médecine
UPDATE Bill_Medicine SET LastModifiedOn = @p0, QuantityPurchased = @p1
WHERE BillID = @p2 AND MedicineID = @p3 AND LastModifiedOn = @p4;
Edit:
Mes Questions:
1- Pourquoi mettre à jour la quantité qui fonctionne mais que la mise à jour du médicament est exception de jet?
2- Est-il possible de mettre à jour Nhibernate la propriété du médicament? Si oui, comment? Si non, quelqu'un peut-il suggérer une solution?
Notez que le qurey généré par NHibernate pour UpdateBillMedicine ne met pas à jour le MedicineID, pourquoi? –