0

SaveOrUpdate通话中,我得到了MappingException No persister for: MyClassProxy.

奇怪的是,我可以使用代码插入新行,但如果该行存在并且存储库尝试更新它,我会收到此异常。

在搜索和阅读了很多关于这个异常的问题之后,这并没有帮助我找到原因,我会问自己:如果映射适用于读取/插入数据,有哪些可能的原因会导致这个异常?

关于我的案例的更多信息:

  • 使用 NHibernate 版本3.3.1.4000
  • 映射是由代码(不是流利的)和引用的另一个dll创建的
  • 映射由 aClassMappingSubclassMapping带有鉴别器的 a 组成
4

1 回答 1

1

我有同样的问题。基本上我实现了一个 NHibernate.EmptyInterceptor 来支持 INotifyPropertyChanged 通知。

但是我在线使用的示例错过了 1 个关键步骤……它没有覆盖 GetEntityName 方法,因此代理将被“转换”回实际对象。

public override string GetEntityName(object entity)
{
    Type type = entity.GetType();
    if (type.FullName.StartsWith("Castle.Proxies") &&
        type.FullName.EndsWith("Proxy"))
    {
        return type.BaseType.FullName;
    }
    return base.GetEntityName(entity);
}

源答案:持久化与 NH 会话无关的 Castle DynamicProxy

注意:示例使用“Castle.Proxies”我没有使用它并从 if 块中删除了这个条件

于 2013-12-24T15:32:37.877 回答