gpt4 book ai didi

nhibernate - 键多对一和键属性关联 : nhibernate won't DELETE items from set

转载 作者:行者123 更新时间:2023-12-04 23:10:43 24 4
gpt4 key购买 nike

我会尽量保持简洁,但希望不会错过我遇到的任何重要信息。我相信代码提供了所有细节,但我忽略了噪音(它是 VB,所以有很多噪音 :))。

一个“Case”对象有很多“Assignments”:

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';列不允许为空值。更新失败。
语句已终止。”这是由于尝试发出以下 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 =

我一直在搜索线程和论坛以及 NHibernate 和 Hibernate 文档,但还没有真正遇到任何类似的东西。希望这是简单的事情。感谢任何尝试过这个的人!

最佳答案

几天前我遇到了同样的问题。解决方案是将 CaseMapping 类中 CaseAssignments 集合的“inverse”属性设置为“true”。像这样:

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

据我所知,您必须将 AllDeleteOrphan 级联类型和 Inverse 属性设置为 true 才能使其工作。

我希望它有效!

关于nhibernate - 键多对一和键属性关联 : nhibernate won't DELETE items from set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1541660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com