如何正确实现IUserType?

Yan*_*vin 23 c# nhibernate nhibernate-mapping ncommon

我需要通过编写一个实现的新mapper类来为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;
}
Run Code Online (Sandbox Code Playgroud)

如何在实际情况或更复杂的情况下正确实现这些方法

roh*_*agg 11

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

MoneyUserType实现称为基类CompositeUserTypeBase

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

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

这里有更详细的解释

  • 链接无效 (3认同)
  • 链接再次死亡 (2认同)

小智 5

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

  • lazyweb上的@Peter McEvoy Stalkers已经应用了修复药膏...... (3认同)