gpt4 book ai didi

c# - 识别 NHibernate 代理类

转载 作者:IT王子 更新时间:2023-10-29 04:00:56 24 4
gpt4 key购买 nike

我不是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com