![](/img/trans.png)
[英]NHibernate 2.0 mapping a composite-id inside a composite-id
[英]Changing part of a composite-id
我有一堂課BillMedicine,它是Bill和Medicine的多對多表。 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
異常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
我已經檢查了NHibernate顯示的SQL,並且它沒有更新葯物
UPDATE Bill_Medicine SET LastModifiedOn = @p0, QuantityPurchased = @p1
WHERE BillID = @p2 AND MedicineID = @p3 AND LastModifiedOn = @p4;
編輯:
我的問題:
1-為什么僅更新數量有效但更新葯物會引發異常?
2-是否可以使Nhibernate更新葯物屬性? 如果是,怎么辦? 如果沒有,有人可以建議解決方法嗎?
我認為您應該創建另一個對象,因為我在這里有一個deja-vu。 你試圖
我建議flushing your session
保存和更新之間的flushing your session
,或者對每個操作都using a transaction
(盡管刷新應該足夠了,我推薦事務只是因為這是一個好習慣:))。 我感覺到您正在嘗試更新尚未插入的對象
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.