У меня есть две сущности 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, не создавая общедоступный метод Bar.AddFoo (), который даже не должен существовать?
Мне кажется, что я должен быть в состоянии поддерживать целостность модели моего домена, не прибегая к необходимости перезагрузки этих объектов из БД после такой операции.
ОБНОВЛЕНИЕ: настройка кода, вдохновленная комментатором.