gpt4 book ai didi

NHibernate:如何为类属性禁用虚拟?

转载 作者:行者123 更新时间:2023-12-02 07:53:19 26 4
gpt4 key购买 nike

我如何将公共(public)方法(非虚拟)与 NHibernate 一起使用?

我有这个代码:

public string crewNumber
{
get
{
return this.crewNumberField;
}
set
{
this.crewNumberField = value;
}
}

注意我所有的类、属性、方法和接口(interface)都是自动生成的,我不想手动更改它们。

上面的代码产生了这个错误:

The following types may not be used as proxies: ... method get_crewNumber should be 'public/protected virtual'

我看到应该可以使用简单的公共(public)属性 here :

In our example above, we've made the properties and the constructor public - but that's not a requirement for NHibernate - it can use public, protected, internal, or even private properties to persist your data.

如何默认关闭此虚拟?

这让我发疯。我真的很想在 visual studio 中拖一个数据适配器并一劳永逸地结束这种荒谬的情况;-)

谢谢

最佳答案

通过在类映射上指定 lazy=false 来指定动态代理不应用于该类。

像这样:

 <class name="MyClass" table="MyTable" lazy="false">
</class>

这当然意味着您不能将动态代理与 NHibernate 一起使用。更清楚一点:- 当您检索能够使用动态代理的类的实例时,您将收到一个“空实例”。也就是说,NHibernate 还不会从数据库中获取数据。您将获得一个对象,其 Id 将被填充,但其他属性不会。只有当你访问一个属性时,NHibernate 才会从数据库中加载数据。这就是为什么属性需要是虚拟的原因,因为 NHibernate 将在内部创建您的类的子类,并覆盖属性以便它可以实现此行为。

我总是在我的类映射中指定“lazy=false”,因为我不想因为与基础设施相关而不是“与域相关”的原因而拥有虚拟属性。

(请注意,这与关联的延迟加载无关;当您不使用动态代理时,仍然可以延迟加载它们)。

关于NHibernate:如何为类属性禁用虚拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2415949/

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