I need to create a custom type for NHibernate by writing a new mapper class that implements IUserType
. While it is relatively straightforward to override most of the methods and properties, I get some difficulties to understand how to deal correctly with the following members:
object Assemble(object cached, object owner);
object DeepCopy(object value);
object Disassemble(object value);
object Replace(object original, object target, object owner);
I do not understand what is exactly their purpose; and more important, how to properly implement them. Most of the examples I have seen just return the raw input parameter.
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;
}
How to implement those methods correctly in a real case or more complex scenario?
You may want to check out this article. It is a good example of how to implement the IUserType interface.
Have a look at how Ritesh Rao has done this in his NCommon framework:
The MoneyUserType implements a base class called CompositeUserTypeBase
There's more detail in the comments but to summarize:
It's explained in a lot more detail here