2010-09-18 84 views
0

我有一个列表和ListItems之间的多对多关联:列表知道它的项目,但ListItem不知道包含列表。级联是saveupdate。NHibernate的多对多和删除项目

因此,无论何时我试图删除一个ListItem实体,我都会得到一个SQLException,说我打破了参照完整性。 NHibernate试图删除我的ListItem而不删除链接表中的相应行。问题是,是否可以指示NHibernate在不破坏参照完整性的情况下删除我的ListItem?

如果我必须手动从包含所有列表中删除项目,我该如何正确地做到这一点?

非常感谢您的任何建议。

乌鲁

回答

0

你需要对孩子的映射设置为inverse=true。从another thread

当你调用SaveOrUpdate NHibernate的 首先删除所有子 对象。然后,因为 关系都没有标记为反向,所以NHibernate还会尝试将 子表 中的 外键列设置为null。由于行已经删除了 ,您将收到第二个 错误。您需要在 关系的一方设置inverse = true来修复 这个问题。这通常在一个 (主键或父母)一侧完成。如果你的 不这样做,NHibernate将会为 的关系做出适当的更新 。

public class StoreMap : ClassMap<Store> 
{ 
    public StoreMap() 
    { 
    Id(x => x.Id); 
    Map(x => x.Name); 
    HasMany(x => x.Staff) 
     .Inverse()   // Magic code! 
     .Cascade.All(); 
    } 
} 
+0

太棒了,谢谢! – ulu 2010-09-19 19:54:55

+0

但是,现在添加到列表不起作用!该项目本身保存到数据库,但我无法将其添加到列表中。我正在使用 list.Items.Add(newItem); _session.Save(newItem); _session.Update(list); – ulu 2010-09-20 13:58:25

+0

如何添加到列表**不**工作?如果你需要,更新你的问题,所以我们有更多的细节。 :) – rebelliard 2010-09-20 14:06:14