删除对象时遇到一些问题。我收到以下错误:
[Test.Item#ab9a9869-b2c1-4262-8d33-9dd9010abd96] [SQL:DELETE FROM InvoerItem WHERE DbId =? AND Version =?]
DELETE语句与REFERENCE约束“FK9100B9F130A0A610”冲突。冲突发生在数据库“”,表“dbo.InvoerItemToInvoerItem”,列'Listener_id'。
情况是这样的,我有一个对象,其中包含对同类其他对象的引用集合,这些对象称为listerners。
对象的映射如下所示:
public InvoerItemMap()
{
HasManyToMany(x => x.Listeners)
.ChildKeyColumn("Listener_id")
.Cascade.None()
.Access.CamelCaseField(Prefix.Underscore);
}
删除连接了侦听器的对象时,导致异常的是什么?我是否必须反转听众的关系?
答案 0 :(得分:0)
不,反无效。
您需要指定要对侦听器执行的操作。基本上有两种选择:
如果您决定取消注册侦听器,那么......只需实现它。
InvoerItem itemToDelete = ...;
itemToDelete.Listeners.Clear();
session.Delete(itemToDelete);
让实体管理听众会更好:
itemToDelete.UnregisterListeners();
编辑:如果您有来自侦听器的引用到invoerItems,您还需要删除它们:
public void UnregisterListeners()
{
foreach(Listener listener in Listeners)
{
listener.Invoeritem = null;
}
Listeners.Clear();
}
顺便说一下:在这种情况下,你应使听众反向。不要忘记将它映射到同一个外键。