1

マッピング テーブルを介して互いに ManyToMany 関係を持つ 2 つのオブジェクトがあります。ただし、保存しようとすると、スタックオーバーフロー例外が発生します。マッピングのコードは次のとおりです。

//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");

performermapping.cs を Cascade.None() に変更すると、例外はなくなりますが、イベント オブジェクトには関連付けられたパフォーマーがありません。

//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

これを正しく書くにはどうすればいいですか?ありがとう

4

1 に答える 1

3

関係の両側を として宣言していますInverse。これは、誰も関係を保存する責任がなく、もちろん機能しないことを意味します。

パフォーマーにイベントを追加しているので、PerformerMapping から Inverse 呼び出しを削除します。

また、Flushセッションの次Evictにイベントを呼び出さない限りsession.Get、同じセッションを使用して を呼び出すと、同じオブジェクトが返されます。

于 2010-06-14T22:16:06.497 に答える