我收到此错误:
------ 测试开始:组装:ECEHire.Test.dll ------
测试"ECEHire.Test.Tests.GenerateSchema_Fixture.Can_generate_schema"失败:NHibernate.HibernateException:初始化字符串的格式不符合从索引 49 开始的规范。 ----> System.ArgumentException:初始化字符串的格式不符合从索引 49 开始的规范。 at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Action 1 scriptAction, Boolean export, Boolean justDrop)
at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Boolean script, Boolean export, Boolean justDrop)
GenerateSchema_Fixture.vb(18,0): at ECEHire.Test.Tests.GenerateSchema_Fixture.Can_generate_schema()
--ArgumentException
at System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue)
at System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey)
at System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules)
at System.Data.SqlClient.SqlConnectionString..ctor(String connectionString)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)
at System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(String connectionString, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions)
at System.Data.SqlClient.SqlConnection.ConnectionString_Set(String value)
at System.Data.SqlClient.SqlConnection.set_ConnectionString(String value)
at NHibernate.Connection.DriverConnectionProvider.GetConnection()
at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Action
1 scriptAction, Boolean export, Boolean justDrop)
通过,1 失败,0 跳过,耗时 3.23 秒(NUnit 2.5.10)。
当我尝试测试我的 NHibernate 配置文件时。
配置文件为:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="connection.connection_string">Data Source=MyServerName;initial catalog=MyDatabaseName;Integrated Security=SSPI</property>
<property name="connection.isolation">ReadCommitted</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
</session-factory>
</hibernate-configuration>
我正在运行的测试是:
<Test()> _
Public Sub Can_generate_schema()
Dim cfg = New Configuration()
cfg.Configure()
cfg.AddAssembly(GetType(Question).Assembly)
Dim exp As NHibernate.Tool.hbm2ddl.SchemaExport = New NHibernate.Tool.hbm2ddl.SchemaExport(cfg)
exp.Execute(False, True, False)
End Sub
我相信这是一个连接字符串错误,但连接字符串作为 web.config 文件的一部分工作,用于通过 ADO 查询数据库。
尝试一些事情:-
- 可以像添加 ;(分号),例如
Integrated Security=SSPI;
- 或者尝试更改为
Integrated Security=True;
- 或者放下
connection.connection_string
并使用connection.connection_string_name
在 web.config 中
<connectionStrings>
<add name="db" connectionString="Data Source=MyServerName;initial catalog=MyDatabaseName;Integrated Security=SSPI;"/>
</connectionStrings>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
...
<property name="connection.connection_string_name">db</property>
...
</session-factory>
</hibernate-configuration>
编辑 接下来要尝试的是确保在测试中使用配置文件,因此请尝试以下操作:
cfg.Configure(@"c:hibernate.cfg.xml");
确保路径完全正确,如果失败,则在此行放置一个断点:-
cfg.AddAssembly(GetType(Question).Assembly)
然后添加此监视cfg.Properties
并确保连接字符串作为键值对存在
编辑2对于单元测试,您需要复制本地 true 并从执行程序集获取路径或创建一个 app.config 并使用:-
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="hibernate-configuration"
type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
</configSections>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property ../>
</session-factory>
</hibernate-configuration>
</configuration>
对于一个网站,你可以做:-
cfg.Configure(HttpContext.Current.Server.MapPath("~/hibernate.cfg.xml"));
老实说,有很多选择,这确实是另一个问题!