【问题标题】:Fluent NHibernate - exception occurred during configuration of persistence layerFluent NHibernate - 配置持久层时发生异常
【发布时间】:2009-10-27 13:42:26
【问题描述】:

我正在使用带有外部“hibernate.cfg.xml”文件的 Fluent NHibernate。

以下是出现错误的配置代码:

       var configuration = new Configuration();
       configuration.Configure();

       _sessionFactory = Fluently.Configure(configuration)
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Template>())
                .BuildSessionFactory();

        return _sessionFactory;

但是当 NHibernate 尝试配置时,我收到了以下错误:

配置持久层时发生异常。

内部异常说:

未配置 ProxyFactoryFactory。 使用可用的 NHibernate.ByteCode 提供程序之一初始化会话工厂配置部分的“proxyfactory.factory_class”属性。

我用谷歌搜索,根据我找到的一些解决方案,我做了以下更改:

  1. 将以下 dll 添加到我的应用程序箱中:

    Castle.Core.dll、Castle.DynamicProxy2.dll、NHibernate.ByteCode.Castle.dll

  2. 在 hibernate.cfg.xml 中添加了以下属性

    NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle

但我仍然遇到同样的异常。

【问题讨论】:

  • 如果您在 Visual Studio 中单击异常帮助程序,您可以看到 InnerException(之后可能还有 InnerException)。您可以查找它们并包含尽可能多的错误信息吗?它们可能揭示了实际问题。

标签: c# nhibernate configuration fluent-nhibernate


【解决方案1】:

我也有这个错误。当您不将映射文件 (hibernate.cfg.xml) 复制到构建目录时会触发它。

解决方案:

  • 在解决方案资源管理器中,右键单击映射文件 (hibernate.cfg.xml),选择 Properties,然后确保 strong>Copy To Output Directory 已选择Copy if newer)。

【讨论】:

  • 谢谢 KKMCT... 它帮了我很多:)
【解决方案2】:

正如 Alex InTechno 所说,这可能是映射文件或映射实体定义中的错误。当我忘记映射类中的所有属性都必须定义为 virtual.

时,我遇到了同样的错误
public String Name {get;set;}
public virtual String Name { get; set; }

【讨论】:

  • 谢谢;这是我的这个错误的特定版本的解决方案。 ReSharper 警告我不要访问虚拟成员,并建议将课程密封起来,我像个菜鸟一样接受了。
【解决方案3】:

问题可能出在您的 hibernate.cfg.xml 中,请仔细检查使用的是 2.2 版本以及格式是否正确。

映射应该像这样开始:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">

除了您发布的错误之外,可能还会提供更多信息,因为该错误对于配置解析器来说是非常通用的。如果没有,也许您可​​以提供有关 hibernate.cfg.xml 的更多详细信息。

【讨论】:

    【解决方案4】:

    PotentialReasons 文本异常

    * 数据库未通过数据库方法配置。

    FluentConfiguration.BuildConfiguration() 方法也可能引发如果您的映射错误(即 .*Map 类未成功解析)并且您没有使用 .Database() 方法配置数据库。 这有点令人困惑,它仅在构建配置的步骤中被发现,而不是在从程序集中添加这些类时(通过 AddFromAssemblyOf)

    您可以通过执行一行来检查您的 *Map 类是否成功转换为 HBM m.FluentMappings.Add(typeof(YourMappedTypeMap)).ExportTo(@"c:\Temp\fluentmaps"))

    【讨论】:

      【解决方案5】:

      我在 Resharper 8.1 下的 NUnit 测试遇到了同样的问题

      勾选“ReSharper | 选项 | 工具 | 单元测试 | 为每个带有测试的程序集使用单独的 AppDomain”复选框修复它

      【讨论】:

        【解决方案6】:

        好吧,我可以通过将 .cfg.xml 文件放在调用应用程序的 bin 中来解决该错误。

        但是现在,我又遇到了一个错误 :-(

        FluentNHibernate.Cfg.FluentConfigurationException 未处理 消息:创建 SessionFactory 时使用了无效或不完整的配置。查看PotentialReasons 集合和InnerException 了解更多详情。

        * 数据库没有通过数据库方法配置。

        这是我的 hibernate.cfg.xml

        <?xml version="1.0" encoding="utf-8" ?>
        <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
          <session-factory>
            <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
            <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
            <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
            <property name="connection.connection_string">Server=dev\sql2005;Initial Catalog=TestDB;Integrated Security=True</property>
            <property name="show_sql">true</property>
          </session-factory>
        </hibernate-configuration> 
        

        有什么想法吗?

        【讨论】:

        • +1 给詹姆斯。继续沿着例外树向下运行,直到找到有用的东西。
        • +1 给詹姆斯。我遇到了这个错误并查看了 InnerException,发现没有找到命名的连接字符串,并意识到我的测试项目的 App.config 缺少我的 Web 应用程序的 Web.config 中的连接字符串。
        【解决方案7】:

        尝试在 App.config 中配置数据库并通过 Fluent NHibernate 进行映射,我也得到了 FluentNHibernateException 提示

        • 数据库未通过数据库方法配置。

        显示详细信息的链接已停用,因此我无法获得更多信息。搜索了几个小时,我终于发现我的连接字符串有错误(“pasword=xyz;”而不是“password=xyz;”)

        【讨论】:

          【解决方案8】:

          尝试在 set_id 和 set_sampleList 中设置受保护的修饰符。例如:

          public virtual int Id {
              get; protected set;
          }
          

          public virtual IList<Store> StoresStockedIn {
              get; protected set;
          }
          

          【讨论】:

            【解决方案9】:

            我开始收到了

            * 数据库不是通过数据库方法配置的。

            在未对我的代码进行任何更改的情况下尝试连接到 DB/2 数据库时出现错误消息。在确认配置文件被复制到构建目录并确认我的 XML 格式正确且符合 2.2 版之后,我最后去检查数据库以确保没有任何变化。

            原来连接帐户的密码已过期。它不是无效的,也不是帐户处于非活动状态——密码只是过期了。我不知道为什么密码过期会出现在如此奇怪的错误消息中。

            【讨论】:

              【解决方案10】:

              看起来这个错误可能是一堆不同的东西。我得到了同样的错误,最终发现这是因为我从项目中排除了一个未使用的视图和映射。不知道这是如何导致错误的,但是一旦我将其添加回来,错误就消失了。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-02-11
                • 2011-02-06
                相关资源
                最近更新 更多