2009-10-14 8 views
20

J'ai besoin de créer un custom type pour NHibernate en écrivant une nouvelle classe de 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:Comment implémenter correctement IUserType?

  • 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 quel est exactement leur but; et plus important, comment les appliquer correctement. La plupart des exemples que j'ai vus retournent juste 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?

Répondre

10

Jetez un oeil à la façon dont Ritesh Rao a fait dans son NCommon cadre:

Le MoneyUserType implémente une classe de base appelée CompositeUserTypeBase

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

  • DeepCopy - devrait renvoyer une copie profonde de l'état persistant, en s'arrêtant aux entités et aux collections
  • Désassembler - transforme le o bjecter dans sa représentation "cacheable" (c.-à-d. les associations doivent être mises en cache en tant que valeurs d'identification)
  • Assemblez - reconstitue un objet de la représentation cacheable

It's explained in a lot more detail here

+0

Le lien à la fin mène à un article très intéressant. Merci beaucoup. –

+2

le lien n'est pas valide – Cherian

+0

Merci, le lien est maintenant corrigé – rohancragg

5

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

+1

Ce lien est maintenant mort .... –

+2

@ Peter McEvoy Stalkers sur lazyweb ont appliqué un baume réparateur ... –

Questions connexes