23

我需要通过编写一个新的映射器类来为NHibernate创建一个自定义类型。虽然覆盖大多数方法和属性相对简单,但我很难理解如何正确处理以下成员:IUserType

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

如何在真实案例或更复杂的场景中正确实现这些方法?

4

2 回答 2

11

看看 Ritesh Rao 在他的NCommon框架中是如何做到这一点的:

MoneyUserType实现了一个名为CompositeUserTypeBase的基类

评论中有更多细节,但总结一下:

  • DeepCopy - 应该返回持久状态的深层副本,在实体和集合处停止
  • Disassemble - 将对象转换为其“可缓存”表示(即关联必须作为标识符值缓存)
  • 组装 - 从可缓存的表示中重建对象

这里有更详细的解释

于 2009-10-16T11:26:03.783 回答
5

您可能想查看这篇文章。这是如何实现 IUserType 接口的一个很好的例子。

于 2010-03-17T15:44:03.453 回答