我想刪除一個對象,並級聯刪除到一對多關聯的子對象。我認爲,我已經做了一切正確的工作。但是,當我運行我的測試時,NHibernate嘗試將空值插入到子表的外鍵列中,而不是刪除項目。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:
INSERT INTO Carrier s(...)VALUES(...);選擇last_insert_rowid(); @ p0 ='WSH',@ p1 = 759540,@ p2 = False
INSERT INTO車輛(...)VALUES(...);選擇last_insert_rowid(); @ P0 = 2,@ P1 = 'FOOBAR',@ P2 = 4
SELECT carrier0_.Id,... FROM載體carrier0_ WHERE [email protected]; @ P0 = 4 SELECT vehicles0_.CarrierId如CarrierId1_,... FROM車輛vehicles0_ WHERE [email protected]; @ P0 = 4
UPDATE SET車輛= CarrierId空WHERE CarrierId = @ P0; P0 @ = 4
這是大膽的行,導致測試失敗,因爲我有載體上的非空約束(請參閱車輛映射)。
這是我不明白,如果我有一個非空約束,爲什麼NHibernate嘗試和插入null到列中。
那麼,我需要做些什麼來確保刪除運營商,刪除所有車輛?
感謝, 本
看到我的回答如下 - 一個錯字是原因! – 2010-06-29 11:36:02