如何正确实现IUserType?
我需要通过编写一个实现IUserType
的新mapper类来为NHibernate创建一个自定义类型 。 虽然覆盖大多数方法和属性相对简单,但我理解如何正确处理以下成员会遇到一些困难:
-
object Assemble(object cached, object owner);
-
object DeepCopy(object value);
-
object Disassemble(object value);
-
object Replace(object original, object target, object owner);
我不明白他们的目的是什么; 更重要的是,如何正确实施它们。 我见过的大多数例子都只返回原始输入参数。
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; }
如何在实际情况或更复杂的情况下正确实现这些方法 ?
看看Ritesh Rao如何在他的NCommon框架中做到这一点:
MoneyUserType实现了一个名为CompositeUserTypeBase的基类
评论中有更多细节,但总结如下:
- DeepCopy – 应该返回持久状态的深层副本,在实体和集合处停止
- 反汇编 – 将对象转换为“可缓存”表示(即关联必须缓存为标识符值)
- 汇编 – 从可缓存表示中重建对象
这里有更详细的解释
您可能想看看这篇文章 。 这是如何实现IUserType接口的一个很好的例子。