簡體   English   中英

NHibernate級聯刪除不適用於一對多關聯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM