我想将child添加到父级。在哪一点上,我知道的孩子的新身份证?我可以在DB插入之前访问它吗?我的ID生成器是HILO。我问的原因是父对象的副本需要传播到另一个应用程序。了解这一点可能会让我无法访问数据库,只是为了发现新插入的Child的ID是什么,因为我已经拥有了所有其他信息。
如果1)无法完成w / out往返DB,那么(插入后)如何选择仅有子项的父项?父母可能有多个孩子,但我只对那个孩子的父母感兴趣。这对我来说不太合适:
parent = session.QueryOver() .LIST() .Where(p => p.Children.Select(c => c.Id == ChildId).First())。First();
我想要的SQL等价物是:
select Parent.Id, Children.* From Parent
join Children on Parent.Id = Children.ParentId
where ChildId = 1540096
答案 0 :(得分:1)
在Session.Save(YourObject)
上,将为您的对象填充ID。但是,这不会导致立即插入数据库。实际插入将在会话刷新(Transaction.Commit等)上发生。
除此之外,使用您当前的方法,您可能会传播可能无法映射到现有对象的Id。例如,假设您在插入之前传播Id,然后插入因任何原因而失败。如何应对这种不一致的状态?谨防这种情况和类似情况。
我对你的建议是不要传播可能无效的国家。