1

NHibernate のドキュメントから:

その固有の性質により、このジェネレータを使用するエンティティは ISession の SaveOrUpdate() メソッドを介して保存できません。代わりに、ISession の Save() または Update() メソッドを呼び出して、オブジェクトを保存または更新する必要があるかどうかを NHibernate に明示的に指定する必要があります。

これらのエンティティが別のエンティティの子であり、カスケードを使用して、親が保存されたときにその子も永続化されるようにしたい場合、SaveまたはUpdate

Aggregate Root を吹き飛ばして、個々の子の保存を開始する必要がありますか? フレームワークでこれをカバーするのはどれほど大変でしたか? クラッパーを離れるときに電気を消す必要はありません。自動であるべきだと思います。

4

1 に答える 1

0

それは可能ですが、わずかではありますが完全に好ましくない副作用があります。

VersionUnsavedValue構成を使用するとSaveOrUpdate()、エンティティでもう一度使用でき、カスケードは期待どおりに機能します。

ただし、バージョン値はデータベース側で処理されるため、NH は最新バージョン (私の場合はタイムスタンプ) を取得するために 2 回目の呼び出しを行う必要があります。

私は子の保存を処理する集計ルートをはるかに好むので、それは私にとってはうまくいきます。

...

public virtual byte[] Version { get; set; }

...

mapping.Version(m => m.Version)
.UnsavedValue(null)
.CustomSqlType("timestamp")
.CustomType("BinaryBlob")
.Generated.Always();
于 2012-12-31T15:17:19.017 に答える