gpt4 book ai didi

NHibernate 代理工厂

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

我已经通过 Nuget 安装了 NHibernate.3.3.2.4000 到我的 MVC3 项目中,在没有 proxyfactory.factory_class 的情况下配置它:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect, NHibernate</property>
<property name="connection.connection_string_name">db</property>
<property name="adonet.batch_size">50</property>
<property name="current_session_context_class">web</property>
<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
<mapping assembly="TheWorkshop.DomainModel" />
</session-factory>
</hibernate-configuration>

但像这样我收到以下错误:

The following types may not be used as proxies: TheWorkshop.DomainModel.Contact: method set_DateAdded should be 'public/protected virtual' or 'protected internal virtual'

DateAdded 属性私下设置 DateAdded 值的地方

 public virtual DateTime DateAdded
{
get { return _dateAdded; }
private set { _dateAdded = DateTime.Now; }
}

我并不是特别想公开 setter,我的想法是自动设置 DateAdded。

我看到帖子建议我可以将 proxyfactory.factory_class 设置为

<property name="proxyfactory.factory_class">
NHibernate.ByteCode.Castle.ProxyFactoryFactory,
NHibernate.ByteCode.Castle
</property>

但是 Nuget 安装并没有降低对 NHibernate.ByteCode.CaSTLe 的任何引用,当我尝试 Install-Package NHibernate.CaSTLe 时失败了

Install failed. Rolling back...
Install-Package : Already referencing a newer version of 'NHibernate'.
At line:1 char:16
+ Install-Package <<<< NHibernate.Castle
+ CategoryInfo : NotSpecified: (:) [Install-Package], InvalidOperationException
+ FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand

所以我想我可以降低 NHibernate 的版本,但这似乎是错误的......我应该做什么,类似的问题NuGet: NHibernate, Castle.Core 3.0 and where is ProxyFactoryFactory?说我不需要在新版本中配置 proxyfactory.factory_class

The last versions of NHibernate do not require configuring a proxy factory.
An internal one is used by default and the old adapters are not part of the project anymore.

最佳答案

  1. 您不一定需要 CaSTLe.Core,除非您像在第二部分中那样使用 CaSTLe.Core 代理工厂。默认情况下,NHibernate 带有它自己的代理工厂,这是你第一次使用的,所以我不会评论 CaSTLe.Core 部分(而且我认为它不适用于最新的 nhibernate)
  2. 您可以通过告诉 nhibernate 您不想延迟加载该类(默认情况下启用)来解决您的错误。执行此操作的方式因映射方式而异。
  3. 您可以通过将 setter 设置为 protected 而不是私有(private)来消除错误。
  4. 我认为您的二传手实际上并没有像您认为的那样工作。除非您实际上为该属性设置了一个值,否则它永远不会获得当前日期/时间,在这种情况下,您最好将其设置为 DateTime.Now 而不是您所拥有的。此外,当 nhibernate 加载它时,您将获得当前日期而不是创建它的实际日期/时间。您应该在构造函数中设置值,而不是像现在这样劫持 setter 。

关于NHibernate 代理工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15076765/

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