[英]NHibernate Cascaded delete not working on one-to-many association
我試圖刪除一個對象,並在一對多關聯中將刪除級聯到子對象。 我認為我已正確完成了所有工作,以使其正常工作。 但是,當我運行測試時,NHibernate嘗試將空值插入子表的外鍵列中,而不是刪除項目。
從我的父映射(運營商):
<set name="Drivers" access="field.camelcase-underscore">
<key column="CarrierId"/>
<one-to-many class="Vehicle"/>
</set>
從我的孩子映射(車輛):
<many-to-one name="Carrier" class="Carrier" column="CarrierId" not-null="true"/>
我的測試:
[Test]
public void Can_delete_a_carrier_and_associated_vehicles() {
object id;
var carrier = new Carrier { BusinessRef = 759540, Name = "Carrier1" };
var vehicle = new Vehicle { Carrier = carrier, BusinessRef = "FOOBAR", VehicleType = VehicleType.Trailer };
using (var txn = session.BeginTransaction()) {
id = session.Save(carrier);
session.Save(vehicle);
txn.Commit();
}
session.Clear();
using (var txn = session.BeginTransaction()) {
var fromDb = session.Get<Carrier>(id);
Assert.IsNotNull(fromDb);
Assert.AreEqual("FOOBAR", fromDb.Vehicles.First().BusinessRef);
session.Delete(fromDb);
txn.Commit();
}
}
生成的SQL:
插入運營商(...)值(...); 選擇last_insert_rowid(); @ p0 ='WSH',@ p1 = 759540,@ p2 = False
將車輛插入(...)值(...); 選擇last_insert_rowid(); @ p0 = 2,@ p1 ='FOOBAR',@ p2 = 4
SELECT carrier0_.Id,... FROM承運人carrier0_ WHERE carrier0_.Id=@p0; @ p0 = 4選擇車輛0_.CarrierId作為CarrierId1_,...從車輛車輛0_ WHERE車輛0_.CarrierId=@p0; @ p0 = 4
更新車輛SET CarrierId = null WHERE CarrierId = @ p0; @ p0 = 4
是粗體的行導致測試失敗,因為我對運輸工具沒有非null約束(請參閱車輛映射)。
這是我不明白的,如果我有一個非null的約束,為什么NHibernate嘗試將null插入列中。
那么,我該怎么做才能確保刪除運營商,刪除所有車輛?
謝謝,本
畢竟,問題最終是在父對象上定義的其他一組錯誤中出現的。 只是通過嘗試一些更具體的測試,我發現我試圖將集合轉換為錯誤的類型-哎呀!
因此,基本上,如果您使用上面的映射,則刪除操作會級聯(前提是您不犯傻的錯字:))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.