尝试从集合中删除复合对象时会出现stackoverflow异常(但仅当我将其包装在事务中时)。但是获取对象并在会话中删除它而不是集合,并保存父作品。
代码如下所示:
using (var session = sessionProvider.GetSession())
{
using (var transaction = session.BeginTransaction())
{
var products = session.Query<MyObject>().Select(x => x.MyObjectId > 0).ToList();
//Would fail
var variant = session.Query<MyObject>().FirstOrDefault(x => x.Name == "some name that exists");
var parent = MyObject.Parent;
parent.RemoveMyObject(variant);
session.Save(parent);
//Doesn't fail
//session.Delete(variant);
transaction.Commit();
}
session.Flush();
}
我的映射看起来像这样:
HasMany(x => x.MyObject).AsSet().Cascade.AllDeleteOrphan().Inverse().KeyColumn("MyObjectId").BatchSize(2000);
References(x => x.MyObject).Column("MyObjectId");
我该怎么做才能解决这个问题?它应该以两种方式工作。正如所说的那样,只有当有交易时才会这样。这两种方法都没有交易。
祝你好运 的Morten