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é.
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.