gpt4 book ai didi

c# - Nhibernate 3.3.0.4000 错误地孤立了子实体

转载 作者:太空宇宙 更新时间:2023-11-03 13:59:42 25 4
gpt4 key购买 nike

我无法在本地重新创建生产系统中的间歇性问题。似乎正在发生的事情是,在编辑子实体和保存包含集合的父实体期间,没有明显的原因,子实体上的父关联在数据库中被删除。有效地孤立子实体。

这是流畅的映射:

 mapping.HasMany<ExpenseItem>(x => x.ExpenseItems).Cascade.AllDeleteOrphan();

实体也可以直接保存(也是聚合根),但是在测试的过程中并没有表现出移除父关联。

子对象中没有对父本身的引用,关联全部在 Nhibernate 处理的数据库中。

也不可能将相同的子实体分配给另一个父实体,因为费用项目(子实体)不能直接添加到其父实体之外。请参阅下面的代码。

 public virtual ExpenseItem AddNewExpenseItem(ExpenseAnalysis analysis,
string recipientName,
string purchaseAccountReference,
string expenseDescription,
string expenseNotes,
Money value,
VATAnalysis vat)
{
Validate.IsNotNull<ExpenseAnalysis>(analysis);
Validate.IsNotNull(expenseDescription);
....


ExpenseItem newExpenseItem = new ExpenseItem(analysis,
recipientName,
purchaseAccountReference,
expenseDescription,
expenseNotes,
value,
vat,
expenseItemUniqueReference,
true,
Candidate.Assessment);
_expenseItems.Add(newExpenseItem);
....

有什么想法吗?

最佳答案

这肯定有助于查看您的映射,但请看一下

我还会将 ExpenseItem 映射到其父级的引用

How to delete child object in NHibernate?

基本上,您必须在关系上设置反向,以便 NHibernate 不会尝试使用空受害者更新已删除的记录。然后你设置 Cascade.All | Cascade.DeleteOrphans 这样我们不仅可以通过清零受害者来破坏关系,还可以删除整个子记录。

关于c# - Nhibernate 3.3.0.4000 错误地孤立了子实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11013431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com