0

次のシナリオがあります。実行時に 2 つの「親」エンティティが作成されます。それぞれが 1 つの「共有」子エンティティを参照します。

ここにいくつかの擬似コードがあります:

public class Parent
{
    public Parent(Child child)
    {...}
    public Child { get; }
}

Child child = new Child();
Parent mother = new Parent(child)
Parent father = new Parent(child)

母と父のインスタンスを個別に、そして潜在的に別のスレッドに保存できるようにしたいので、異なるセッションとトランザクション内から。

NH で Child エンティティの保存を処理するにはどうすればよいですか?

OK、18 回の閲覧、コメントはありません。もう少し説明を加える必要があると思います。

私のマッピングでは、親が永続化されているときに子が自動的に永続化される必要があると定義しています。

子エンティティで何が起こるか

session.Save(father)

1 つのスレッドで呼び出され、

session.Save(mother)

別のスレッドで?

4

1 に答える 1

0

コメントからわかるように、子は参照にのみ必要でありsession.Load<Child>(knownChildId)、各スレッドで使用するために保存されます。これにより、同じオブジェクトに対して2つの異なるプロキシが作成されます。

子供がまだ保存されておらず、カスケードが設定されている場合は、潜在的な競合状態が発生している可能性があります。

  • 親を処理するスレッドを作成する前に、共有された子を保存します
  • lock(child)session.Save(father);
  • 子のビジネスキーに一意の制約を導入し、スレッドでDuplicateKeyExceptionを処理します
于 2012-12-11T20:02:41.440 に答える