NHibernate ManyToMany Отношения Каскадирование AllDeleteOrphan StackruException

У меня есть два объекта, которые имеют отношения ManyToMany друг с другом через таблицу сопоставления. Однако, когда я пытаюсь сохранить его, я получаю исключение переполнения стека. Ниже приведен код для сопоставлений:

//EventMapping.cs
HasManyToMany(x => x.Performers).Table("EventPerformer").Inverse().Cascade.AllDeleteOrphan().LazyLoad().ParentKeyColumn("EventId").ChildKeyColumn("PerformerId");


//PerformerMapping.cs
HasManyToMany<Event>(x => x.Events).Table("EventPerformer").Inverse().Cascade.AllDeleteOrphan().LazyLoad().ParentKeyColumn("PerformerId").ChildKeyColumn("EventId");

Когда я изменяю performancemermapping.cs на Cascade.None(), я избавляюсь от исключения, но тогда у моего объекта Event нет исполнителя, с которым я его связываю.

//In a unit test, paraphrased
event.Performers.Add(performer); //Event
eventRepository.Save<Event>(event);
eventResult = eventRepository.GetById<Event>(event.id); //Event
eventResult.Performers[0]; //is null, should have performer in it

Как я должен писать это правильно? Спасибо

1 ответ

Решение

Вы объявляете обе стороны отношений как InverseЭто означает, что никто не несет ответственности за сохранение отношений, и, конечно, не будет работать.

Поскольку вы добавляете события в исполнителей, удалите обратный вызов из PerformerMapping.

Кроме того, если вы Flush сеанс, а затем Evict событие, вызов session.Get использование того же сеанса вернет тот же объект.

Другие вопросы по тегам