isessionfactory fluently features example c# nhibernate nhibernate-mapping ncommon

c# - fluently - nhibernate github



¿Cómo implementar correctamente IUserType? (2)

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

El MoneyUserType implementa una clase base llamada CompositeUserTypeBase

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

  • DeepCopy: debe devolver una copia profunda del estado persistente, deteniéndose en las entidades y en las colecciones
  • Desmontar: transforma el objeto en su representación ''almacenable en caché'' (es decir, las asociaciones deben almacenarse en caché como valores de identificación)
  • Ensamblar: reconstruye un objeto a partir de la representación en caché.

Se explica con mucho más detalle aquí.

Necesito crear un tipo personalizado para NHibernate escribiendo una nueva clase de asignador que implemente IUserType . Si bien es relativamente sencillo anular la mayoría de los métodos y propiedades, tengo algunas dificultades para entender cómo tratar correctamente a los siguientes miembros:

  • 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 lo 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 implementar esos métodos correctamente en un caso real o en un escenario más complejo?


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