使用NHibernate删除一对多关系中的子对象时遇到问题
这个标题大致概括了我所面临的问题。基本上我有两门课:使用NHibernate删除一对多关系中的子对象时遇到问题,nhibernate,nhibernate-mapping,one-to-many,Nhibernate,Nhibernate Mapping,One To Many,这个标题大致概括了我所面临的问题。基本上我有两门课: public class Parent : IIntegerIdentifiable { public virtual long Id { get; set; } public virtual ICollection<Child> Children {get; set; } } public class Child : IIntegerIdentifiable { public virtual long Id
public class Parent : IIntegerIdentifiable
{
public virtual long Id { get; set; }
public virtual ICollection<Child> Children {get; set; }
}
public class Child : IIntegerIdentifiable
{
public virtual long Id { get; set; }
public virtual Parent Parent { get; set; }
}
我们的代码设置为在请求结束时调用flush。每当我尝试执行代码时,都会出现以下错误:
无法在“test.dbo.Child”表的“parent_id”列中插入值NULL;列不允许空值。更新失败
我还尝试先删除每个子实体,刷新会话,然后更新父集合。它给出了同样的错误。问题是
a) 为什么nHibernate试图将父id列更新为null,然后删除?
b) 我该怎么做才能使删除工作正常
为了让你知道我不是在浪费你的时间,我引用了其他关于这个主题的帖子,比如-
-
但似乎什么都不管用。有人能给我指一下正确的方向吗?谢谢你的帮助 我认为这与Cascade选项有关,尝试将Cascade更改为All\u Delete\u Orphan From Cascade.All
很抱歉这么晚才发布。由于子映射中的“Cascade.All()”而发生问题。因此,当删除/删除子项时,会触发父集合的保存,从而导致此错误。谢谢你的帮助!!
public sealed class ParentMap : ClassMap<Parent>
{
public ParentMap()
{
Id(x => x.Id).GeneratedBy.HiLo(
"HiLoUniqueKey", "NextHi", "99", "ObjectType = 'Parent'");
HasMany(x => x.Children).KeyColumn("Parent_Id").Inverse().Cascade.AllDeleteOrphan();
}
}
public sealed class ChildMap : ClassMap<Child>
{
public ChildMap()
{
Id(x => x.Id).GeneratedBy.HiLo("HiLoUniqueKey", "NextHi", "99", "ObjectType = 'Child'");
References(x => x.Event).Cascade.All();
}
}
public void ClearChildEntries(long parentId)
{
//I had tried the following and was getting errors before I read the other posts on the topic
//QueryOver().Where(x => x.Event.Id == eventId).List().ToList().ForEach(Remove);
//Session.flush()
//Current code
var parent = _parentRepository.GetById(parentId);
parent.Children.Clear();
_parentRepository.SaveOrUpdate(parent);
}