2 つのエンティティ Foo と Bar があり、それらの間に多対多の関係があります。
なぜ Foo が多対多の関係に対して「責任がある」のかについての意味論的議論はないとしましょう。しかし、私たちは Foo が関係に対して責任があると勝手に決定します (つまり、NHibernate では Bar を Inverse としてマークします)。
DB の観点からはこれで十分ですが、私のエンティティ 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 の関連コレクションを更新するにはどうすればよいでしょうか?
このような操作の後にこれらのエンティティを DB からリロードする必要なく、ドメイン モデルの整合性を維持できるはずだと思います。
更新: コメンターに触発されたコードの微調整。