我不是NHibernate用户;我写了一个序列化实用程序库。用户已记录一个功能请求,该请求应处理NHibernate代理类,并将它们与实际类型相同。目前,我的代码将它们视为意外继承,并引发异常。

该代码不会事先知道NHibernate(不包括引用,但我不讨厌反射;-p)

是否存在检测此类代理类型的可靠/有保证的方法?显然DataContractSerializer处理得很好,所以我希望它很简单。也许一些接口(interface)或[attribute]装饰。

另外,在反序列化期间;目前,我将创建原始类型(不是NHibernate类型)。这样可以持久吗?还是需要代理类型?如果是后者;创建代理类型的实例需要什么?

最佳答案

您可以通过将类强制转换为INHibernateProxy来检测类是否为NHibernate代理。

如果需要获取基础的“真实”对象,请使用:

Session.GetSessionImplementation().PersistenceContext.Unproxy(proxiedObject)

您无需测试代理即可调用Unproxy;如果不是代理,它将返回原始参数。

编辑:我现在使用另一种方法来获取基础对象,主要用于解决延迟加载和继承问题:http://sessionfactory.blogspot.com/2010/08/hacking-lazy-loaded-inheritance.html

关于c# - 识别NHibernate代理类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2664245/

10-12 00:29
查看更多