【发布时间】:2016-04-14 06:44:25
【问题描述】:
我有一个关于 NHibernate 中代理的问题。我的日志文件中有很多日志,例如:Narrowing proxy to - this operation breaks == 网上还有其他一些问题和不同的答案:
Stackoverflow NHibernate narrowing proxy warning 这是否重要取决于您愿意接受的风险程度。由于您的代码和数据库之间总是存在脱节,因此您不能始终确保铸造将起作用。 这将导致可能难以诊断的错误,如果不更改数据库或代码可能无法解决。
hibernate 的另一个帖子:
Narrowing problem 别担心他的警告,只需将以下内容放入您的日志文件中,您应该就不会再看到它了...
为什么会这样? 假设您有一个与地址具有多对一关联的产品。两者都是实体,并且 Address 有一个 ShippingAddress 子类。
让我们 Session.get(..) 从具有 ShippingAddress 作为关联的数据库中获取产品。因为多对一是惰性的,它会返回一个地址代理。请注意,这是一个 Address 代理而不是 ShippingAddress 代理,因为代理将始终与 Product 中提到的类型匹配(有关详细信息,请参阅 hibernate 手册)。
这个代理被 Hibernate 存储在他的代理缓存中。 现在我们 Session.get(...) 从数据库中获取相同的 ShippingAddress,该地址与我们使用的从数据库中获取的产品相关联。 现在 Hibernate 将看到它已经包含此 ShippingAddress 的代理并将返回它。但是,它会注意到类型不同,因此必须发生“向下转换”。因为“代理”无法执行后一种操作,所以它会创建一个新的并返回它......
如您所见,没什么好担心的。 您可以考虑将地址设为值类型... 在我的情况下,这是没有选择的。
最后一个
这是来自 NHibernate 的代码:StatefulPersistenceContext.cs -> NarrowProxy(..)
那么,这是否有问题?我总是在我的程序中使用分离的对象。 我希望有一个人可以帮助我。 非常感谢。
【问题讨论】:
标签: c# logging nhibernate proxy warnings