C# Fluent NHibernate-配置持久层期间发生异常

C# Fluent NHibernate-配置持久层期间发生异常,c#,nhibernate,configuration,fluent-nhibernate,C#,Nhibernate,Configuration,Fluent Nhibernate,我正在使用Fluent NHibernate和一个外部“hibernate.cfg.xml”文件 以下是出现错误的配置代码: var configuration = new Configuration(); configuration.Configure(); _sessionFactory = Fluently.Configure(configuration) .Mappings(m => m.FluentMap

我正在使用Fluent NHibernate和一个外部“hibernate.cfg.xml”文件

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

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

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

        return _sessionFactory;
var配置=新配置();
Configure.Configure();
_sessionFactory=fluntly.Configure(配置)
.Mappings(m=>m.FluentMappings.AddFromAssemblyOf())
.BuildSessionFactory();
返回工厂;
但当NHibernate尝试配置时,我遇到了一个错误:

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

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

        return _sessionFactory;
配置持久层期间发生异常

内部的例外情况是:

未配置ProxyFactoryFactory。 使用可用的NHibernate.ByteCode提供程序之一初始化会话工厂配置节的“proxyfactory.factory\u类”属性

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

  • 将以下DLL添加到我的应用程序箱:

    Castle.Core.dll、Castle.dynamicproxy.dll、NHibernate.ByteCode.Castle.dll

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

    NHibernate.ByteCode.Castle.proxyFactory,NHibernate.ByteCode.Castle


  • 但我还是遇到了同样的异常。

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

    映射应如下所示开始:

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

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

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

    但现在,我得到了另一个错误:-(

    未处理FluentNHibernate.Cfg.FluentConfigurationException 消息:创建SessionFactory时使用了无效或不完整的配置。有关详细信息,请检查潜在原因集合和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> 
    
    
    NHibernate.Connection.DriverConnectionProvider
    NHibernate.dialogue.mssql2005dialogue
    NHibernate.Driver.SqlClientDriver
    服务器=dev\sql2005;初始目录=TestDB;集成安全性=True
    真的
    

    有什么想法吗?

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

    解决方案:

    • 在解决方案资源管理器中,右键单击映射文件(hibernate.cfg.xml)上的,选择属性,然后确保复制到输出目录已选择了复制(如果选择了较新的

      • 潜在原因文本例外

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

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

        您可以通过执行一行代码来检查*Map类是否成功转换为HBM
        m.FluentMappings.Add(typeof(YourMappedTypeMap)).ExportTo(@“c:\Temp\fluentmaps”)试图在App.config中配置数据库并通过Fluent NHibernate配置映射,我还得到了一个fluentnhibernate异常,说

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

        显示详细信息的链接已停用,因此我无法获取任何进一步信息。搜索数小时后,我终于发现我的连接字符串有一个错误(“password=xyz;”而不是“password=xyz;”)

        正如Alex InTechno所说,这可能是映射文件或映射实体的定义中的错误。当我忘记映射类中的所有属性都必须定义为虚拟属性时,我也遇到了同样的错误


        我对Resharper 8.1下的NUnit测试也有同样的问题


        勾选“ReSharper | Options | Tools | Unit Testing |为每个具有测试的程序集使用单独的AppDomain”复选框,将其修复

        尝试在set|id和set|sampelList中设置受保护的修饰符。例如:

        public virtual int Id {
            get; protected set;
        }
        

        公共虚拟IList存储存储{
        获取;保护集;
        }
        
        我开始接收

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

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


        原来连接帐户的密码已过期。它既不是无效的,也不是无效的——密码只是过期了。我不知道为什么过期密码会出现这样一条奇怪的错误消息。

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

        如果在Visual Studio中单击异常帮助程序,您可以看到
        InnerException
        (可能还有
        InnerException
        )。您能否查找它们并尽可能多地包含错误信息?他们可能揭示了真正的问题。继续沿着Exceptinn树往下跑,直到你找到有用的东西。我犯了这个错误
        public virtual IList<Store> StoresStockedIn {
            get; protected set;
        }