2009-10-14 11 views
20

Necesito crear un custom type para NHibernate escribiendo una nueva clase de correlacionador que implementa IUserType. Si bien es relativamente sencillo para anular la mayoría de los métodos y propiedades, consigo algunas dificultades para entender cómo tratar correctamente con los siguientes miembros:¿Cómo implementar correctamente IUserType?

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

No entiendo cuál es exactamente su propósito; y más importante, cómo implementarlos adecuadamente. La mayoría de los ejemplos que he visto solo devuelven el parámetro de entrada sin procesar.

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

cómo poner en práctica estos métodos correctamente en un caso real o escenario más complejo?

Respuesta

10

Tener un vistazo a cómo Ritesh Rao ha hecho esto en su NCommon marco:

El MoneyUserType implementa una clase base llamada CompositeUserTypeBase

Hay más detalle en los comentarios, pero para resumir:

  • DeepCopy: debe devolver una copia profunda del estado persistente, deteniéndose en las entidades y en las colecciones
  • Desarmar - transforma el o bject en su representación 'cacheable' (es decir asociaciones deben caché como valores de identificador)
  • Ensamble - reconstruye un objeto de la representación cacheables

It's explained in a lot more detail here

+0

El enlace en ese momento conduce a un artículo muy interesante. Gracias a la suerte –

+2

el enlace no es válido – Cherian

+0

Gracias, el enlace se ha fijado ahora – rohancragg

5

Es posible que desee comprobar fuera de este article. Es un buen ejemplo de cómo implementar la interfaz IUserType.

+1

ese enlace está ahora muerto .... –

+2

@ Peter McEvoy Stalkers en lazyweb han aplicado saliva restauradora ... –

Cuestiones relacionadas