相关疑难解决方法(0)

在NHibernate中获取正确类型的代理

我在nhibernate中遇到了未初始化的代理问题

领域模型

假设我有两个并行的类层次结构:Animal,Dog,Cat和AnimalOwner,DogOwner,CatOwner,其中Dog和Cat都继承自Animal和DogOwner,CatOwner都继承自AnimalOwner.AnimalOwner有一个名为OwnedAnimal的类型的引用.

以下是示例中的类:

public abstract class Animal
{
   // some properties
}

public class Dog : Animal
{
   // some more properties
}

public class Cat : Animal
{
   // some more properties
}

public class AnimalOwner 
{
   public virtual Animal OwnedAnimal {get;set;}
   // more properties...
}

public class DogOwner : AnimalOwner
{
   // even more properties
}

public class CatOwner : AnimalOwner
{
   // even more properties
}
Run Code Online (Sandbox Code Playgroud)

这些类具有正确的nhibernate映射,所有属性都是持久的,并且可以延迟加载的所有内容都是延迟加载的.

应用程序业务逻辑只允许您在DogOwner中设置Dog,在CatOwner中设置Cat.

问题

我有这样的代码:

public void ProcessDogOwner(DogOwner owner)
{
   Dog …
Run Code Online (Sandbox Code Playgroud)

.net c# nhibernate proxy

19
推荐指数
2
解决办法
8766
查看次数

NHibernate 警告正在缩小代理范围 - 此操作会中断 ==

我有一个关于 NHibernate 代理的问题。我的日志文件中有很多日志,例如:将代理缩小到 - 此操作中断==网上还有一些其他问题和不同的答案:

Stackoverflow NHibernate 缩小代理警告 这是否是一件大事取决于您愿意接受的风险程度。由于代码和数据库之间始终存在脱节,因此您无法始终确保转换能够正常工作。这将导致可能难以诊断的错误,并且如果不更改数据库或代码就可能无法解决。

hibernate 的另一篇文章:

缩小问题范围 不要担心他的警告,只需将以下内容放入您的日志文件中,您就不会再看到它了......

为什么会发生这种情况?假设您有一个与地址具有多对一关联的产品。两者都是实体,并且 Address 有一个 ShippingAddress 子类。

让我们从数据库中 Session.get(..) 获取一个以 ShippingAddress 作为关联的产品。因为多对一是惰性的,所以它会返回一个Address代理。请注意,这是一个地址代理,而不是一个 ShippingAddress 代理,因为代理将始终与产品中提到的类型匹配(有关详细信息,请参阅 hibernate 书籍)。

该代理由 Hibernate 存储在其代理缓存中。现在,我们从数据库中 Session.get(...) 获取相同的 ShippingAddress,该地址与我们使用的从数据库中获取的产品相关联。现在 Hibernate 将发现它已经包含此 ShippingAddress 的代理并将返回它。但是,它会注意到类型不相同,因此必须进行“向下转型”。因为后一个操作对于“代理”来说是不可能的,所以它将创建新的操作并返回它......

正如你所看到的,没什么好担心的。 您可以考虑将地址设置为值类型...在我的情况下,这是没有选择的。

还有最后一张

Hibernate 4 中删除了 ProxyWarnLog?

以下是 NHibernate 的代码:StatefulPersistenceContext.cs -> NarrowProxy(..)

那么,到底有没有问题呢?我总是在程序中使用分离的对象。我希望有一个人可以帮助我。多谢。

c# nhibernate proxy logging warnings

5
推荐指数
1
解决办法
9526
查看次数

标签 统计

c# ×2

nhibernate ×2

proxy ×2

.net ×1

logging ×1

warnings ×1