Spring.NET配置MySQL数据库遇ConfigurationErrorsException错误求助
修复Spring.NET + NHibernate连接MySQL的配置错误
我来帮你搞定这个问题,你遇到的两个错误其实都是配置不匹配导致的,咱们一步步拆解修复:
核心问题分析
你现在的配置里犯了两个关键错误:
- 误用了SQL Server的数据库提供程序
System.Data.SqlClient来连接MySQL,这两者完全不兼容 - 连接字符串的格式和你指定的NHibernate驱动没有匹配正确
步骤1:替换正确的MySQL数据提供程序
System.Data.SqlClient是专门给SQL Server用的,MySQL需要用官方的MySql.Data.MySqlClient提供程序。先修改你的<db:provider>配置:
<db:provider id="DbProvider" provider="MySql.Data.MySqlClient" connectionString="Server=127.0.0.1;Port=3306;Database=dbschema;User ID=XXX;Password=XXXX"/>
注意:确保你的项目已经引用了
MySql.Data程序包(可以通过NuGet安装MySql.Data或者MySql.Data.NHibernate来获取依赖)
步骤2:确认连接字符串格式(可选优化)
对于MySql.Data.MySqlClient驱动,你当前的连接字符串格式是有效的,也可以写成更标准的MySQL风格:
Server=127.0.0.1;Port=3306;Database=dbschema;Uid=XXX;Pwd=XXXX;
两种格式都能正常工作,选你习惯的就行。
步骤3:验证NHibernate配置的一致性
你已经正确配置了MySQL对应的方言和驱动,这部分没问题,但要确保和上面的DbProvider完全对应:
<property name="HibernateProperties"> <dictionary> <entry key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> <entry key="dialect" value="NHibernate.Dialect.MySQL5Dialect"/> <entry key="connection.driver_class" value="NHibernate.Driver.MySqlDataDriver"/> <entry key="use_proxy_validator" value="false" /> <entry key="show_sql" value="true"/> </dictionary> </property>
为什么之前会报错?
- 第一个错误“不支持关键字‘port’”:因为你用了SQL Server的
SqlClient,它的连接字符串规范里没有Port这个关键字,所以Spring.NET解析配置时直接抛出异常。 - 第二个错误“系统找不到指定文件”:移除
Port后,SqlClient还是试图加载SQL Server的驱动文件,但你实际要连接的是MySQL,自然找不到对应的驱动资源。
完整的正确配置示例
<db:provider id="DbProvider" provider="MySql.Data.MySqlClient" connectionString="Server=127.0.0.1;Port=3306;Database=dbschema;User ID=XXX;Password=XXXX"/> <object id="NHibernateSessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate4"> <property name="DbProvider" ref="DbProvider"/> <property name="MappingAssemblies"> <list> <value>WarehouseTemplate</value> </list> </property> <property name="HibernateProperties"> <dictionary> <entry key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> <entry key="dialect" value="NHibernate.Dialect.MySQL5Dialect"/> <entry key="connection.driver_class" value="NHibernate.Driver.MySqlDataDriver"/> <entry key="use_proxy_validator" value="false" /> <entry key="show_sql" value="true"/> </dictionary> </property> <property name="ExposeTransactionAwareSessionFactory" value="true" /> </object>
内容的提问来源于stack exchange,提问作者kronas
相关产品推荐
相关产品推荐

