2016-08-27 4 views
0

で子供を救うことはできませんは、私は比較的単純な問題で苦労している親のID

HasMany(x => x.States) 
     .KeyColumn("WorkflowOid") 
     .Inverse() 
     .Cascade.All() 
     .Not.LazyLoad(); 

DBは、子テーブルの列WorkflowOidを持っています。子マッピングクラスで

References(x => x.Workflow) 
     .Column("WorkflowOid"); 

は「国」リストにおける国家との新しいワークフローオブジェクトを考慮すると、自動的に親がすることなく、ワークフローオブジェクトであることを認識する方法があります子に「ワークフロー」変数を設定しますか?

つまり、Workflow変数を親インスタンスに設定していない状態のWorkflowオブジェクトを保存すると、子の「WorkflowOid」という列がnullになります。

答えて

1

現在マッピングされている方法ではありません。親関係がInverse()としてマップされているため、子オブジェクトに関係を保存する責任はありません。

あなたはCascade.All()セットを持っていますが、親は、単に子供のSaveOrUpdate()を呼び出している、それがヌルWorkflow財産だからWorkflowOidためnullを保存していますので、子供は、親が設定されていません。

1)AddState(State state)と呼ばれる親のメソッドを持っていて、それを呼び出したとき、それはStatesコレクションに追加するだけでなく、state.Workflow = thisを設定します

は、ここでは、この問題を解決するにはいくつかの方法があります。 を削除して、子をInverse()に設定すると、親を保存するだけでWorflowOid列に書き込むことができます。

3))親からInverse()を外し、全く親に子をリンクしていない、これは新しい子作成時にのみ(ただし、更新のことを意味します、あなたはSave()(保存の両方になるだろう子)とUpdate()(WorkflowOidを追加)イベントがありますが、これは効率的ではありませんが、時にはより賢明なコードベースがこれを上回ることがあります。明らかにこのケースでは、あなたは親を介して子供たちだけを得ることができます。

+0

提案3は私が必要としていたものです。ありがとうございました。私はちょうど ".Inverse"の前に ".Not"を追加し、子から参照を削除しました。 – Th3B0Y

関連する問題