簡體   English   中英

key-many-to-one和key-property關聯:nhibernate不會從set中刪除項目

[英]key-many-to-one and key-property association: nhibernate won't DELETE items from set

我會盡量保持這種簡潔,但希望不要錯過任何重要信息。 我相信的代碼提供了所有細節,但我遺漏了噪音(這是VB,所以有很多噪音:))。

“Case”對象有許多“賦值”:

Public Class Case
  Property CaseId As Guid 
  Property Assignments As ISet(Of CaseAssignment)
End Class

Public Class CaseAssignment
  Property Case As Case
  Property RoleId As Guid
End Class

我已經交過的數據模型看起來與你期望的一樣,除了CaseAssignment是一個復合鍵:

table Case
   CaseId uniqueid not null primary key
   ...

table CaseAssignment
   CaseId uniqueid not null
   RoleId uniqueid not null
   PK := (CaseId, RoleId)
   FK from CaseId -> Case.CaseId

最后,Fluent NHibernate映射:

Class CaseMapping
  Public Sub New()
    Table("Case")
    KeyColumn("CaseId")
    HasMany(Function(x) x.Assignments).KeyColumn("CaseId").Cascade.AllDeleteOrphan()
End Class

Class CaseAssignmentMapping
  Public Sub New()
    Table("CaseAssignment")
    CompositeId() _
      .KeyReference(Function(x) x.Case, "CaseId") _
      .KeyProperty(Function(x) x.RoleId)
End Class

KeyReference與XML映射術語中的“key-many-to-one”相關聯。

當我為一個案例添加任務時,一切都很好,但是當我刪除引用時,我會遇到兩個問題之一。 使用此代碼:

aCase.Assignments.Remove(someAssignment)
caseRepository.Save(aCase)

我得到的錯誤是,“無法刪除集合行...無法將值NULL插入列'CaseId',表'CaseAssignments';列不允許空值.UPDATE失敗。語句已被終止。” 這是因為嘗試發出以下SQL:

UPDATE CaseAssignments SET CaseId = null
WHERE CaseId = @p0 AND RoleId = @p1 AND CaseId = @p2
@p0=[valid guid #1],
@p1=[valid guid #2],
@p2=[valid guid #1 again] **!?!**

所以這有點搞砸了。 所以我試試這段代碼:

aCase.Assignments.Remove(someAssignment)
someAssignment.Case = Nothing
caseRepository.Save(aCase)

並且錯誤是“意外的行數:0;預期:1”因為NHibernate試圖:DELETE FROM CaseAssignments WHERE RoleId = [valid guid] AND CaseId = NULL

我一直在搜索線程和論壇以及NHibernate和Hibernate文檔,並沒有真正遇到類似的東西。 希望這很簡單。 感謝任何對此拍攝的人!

幾天前我遇到了同樣的問題。 解決方案是在CaseMapping類的CaseAssignments集合中將“inverse”屬性設置為“true”。 像這樣:

HasMany(Function(x) x.Assignments).KeyColumn("CaseId").Cascade.AllDeleteOrphan().Inverse()

據我所知,你必須同時將AllDeleteOrphan級聯類型和Inverse屬性設置為true才能生效。

我希望它有效!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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