我有两个实体 Foo 和 Bar,它们之间存在多对多关系。
假设对于为什么 Foo 可能对多对多关系“负责”没有语义论据,但是我们任意决定 Foo 负责该关系(即,在 NHibernate 中,我们将 Bar 标记为 Inverse)
从数据库的角度来看,这一切都很好,但是我的实体 API 揭示了一个问题。
// Responsible for the relation
public class Foo
{
List<Bar> Bars = new List<Bar>();
public void AddBar(Bar bar)
{
Bars.Add(bar);
bar.AddFoo(this);
}
}
public class Bar
{
List<Foo> Foos = new List<Foo>();
// This shouldn't exist.
public void AddFoo(Foo foo)
{
Foos.Add(foo);
foo.AddBar(this); // Inf Recursion
}
}
如果我们决定 Foo 负责这种关系,我如何在不创建甚至不应该存在的公共 Bar.AddFoo() 方法的情况下更新 Bar 中的关联集合?
我觉得我应该能够保持我的域模型的完整性,而不必在这样的操作之后从数据库中重新加载这些实体。
更新:受评论者启发的代码调整。