Question

Je dois créer un type personnalisé NHibernate en écrivant une nouvelle classe mappeur qui implémente IUserType. Bien qu'il soit relativement facile de remplacer la plupart des méthodes et des propriétés, je reçois quelques difficultés à comprendre comment traiter correctement les membres suivants:

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

Je ne comprends pas ce qui est exactement leur but; et plus important encore, la façon de les mettre en œuvre correctement. La plupart des exemples que je l'ai vu juste retourner le paramètre d'entrée brut.

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;
}

Comment mettre en œuvre ces méthodes correctement dans un cas réel ou d'un scénario plus complexe?

Était-ce utile?

La solution

Regardez comment Ritesh Rao a fait dans son cadre de NCommon:

Le MoneyUserType met en œuvre une classe de base appelée CompositeUserTypeBase

Il y a plus de détails dans les commentaires, mais pour résumer:

  • deepcopy - doit renvoyer une copie en profondeur de l'état persistant, arrêt à des entités et à des collections
  • Disassemble - transforme l'objet en sa représentation « cacheable » (à savoir les associations doivent être mises en cache en tant que valeurs d'identificateur)
  • Assemblez - reconstitue un objet de la représentation cacheable

Il est expliqué dans beaucoup plus de détails ici

Autres conseils

Vous pouvez consulter cette article . Il est un bon exemple de la façon d'implémenter l'interface IUserType.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top