23

を実装する新しいマッパー クラスを作成して、 NHibernateのカスタム型を作成する必要があります。ほとんどのメソッドとプロパティをオーバーライドするのは比較的簡単ですが、次のメンバーを正しく処理する方法を理解するのが難しい場合があります。IUserType

  • object Assemble(object cached, object owner);
  • object DeepCopy(object value);
  • object Disassemble(object value);
  • object Replace(object original, object target, object owner);

彼らの目的が正確にはわかりません。さらに重要なのは、それらを適切に実装する方法です。私が見たほとんどの例は、生の入力パラメーターを返すだけです。

public object DeepCopy(object value)
{
    return value;
}

public object Replace(object original, object target, object owner)
{
    return original;
}

public object Assemble(object cached, object owner)
{
    return cached;
}

public object Disassemble(object value)
{
    return value;
}

実際のケースまたはより複雑なシナリオでこれらのメソッドを正しく実装する方法は?

4

2 に答える 2

11

Ritesh Rao が彼のNCommonフレームワークでこれをどのように行ったかを見てください。

MoneyUserTypeは、 CompositeUserTypeBaseという基本クラスを実装します。

コメントに詳細がありますが、要約すると:

  • DeepCopy - 永続的な状態のディープ コピーを返し、エンティティとコレクションで停止する必要があります
  • 逆アセンブル - オブジェクトを「キャッシュ可能な」表現に変換します (つまり、関連付けは識別子の値としてキャッシュする必要があります)。
  • アセンブル - キャッシュ可能な表現からオブジェクトを再構築します

ここで詳しく説明されています

于 2009-10-16T11:26:03.783 に答える
5

この記事をチェックしてみてください。これは、IUserType インターフェイスを実装する方法の良い例です。

于 2010-03-17T15:44:03.453 に答える