1

NHibernate構成のセットアップに問題があります。別の構成ファイルを作成すると、それを機能させることができます。次に、Configuration.configureを呼び出すときに、構成ファイルの絶対パス( "C:\ My Documents ...など...)をポイントします。これは明らかになります。開発から本番に移行しようとすると問題になります。そのため、構成をweb.configファイルに移動しようと思いましたが、失敗します。したがって、web.configファイルには次のようになります。

<configSections>
<section name="hibernate-configuration"
  type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
</configSections>

<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=MyDatabase;Integrated Security=True</property>
  <property name="connection.isolation">ReadCommitted</property>
  <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
  <property name="current_session_context_class">web</property>
</session-factory>
</hibernate-configuration>

それから私はこのようにテストしています:

<TestFixture()> _
Public Class GenerateSchema_Fixture

    <Test()> _
    Public Sub Can_generate_schema()

        Dim cfg = New NHibernate.Cfg.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


End Class

そして、このテストを実行すると、次のようになります。

------ Test started: Assembly: ECEHire.Test.dll ------

Test 'ECEHire.Test.Tests.GenerateSchema_Fixture.Can_generate_schema' failed: NHibernate.HibernateException : Format of the initialization string does not conform to specification starting at index 49.

----> System.ArgumentException:初期化文字列の形式がインデックス49から始まる仕様に準拠していません。atNHibernate.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(19,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(Action1 scriptAction、Boolean export、Boolean justDrop)

0 passed, 1 failed, 0 skipped, took 3.30 seconds (NUnit 2.5.10).

私は次の方向に考えています。web.configファイルは私のメインプロジェクトにあり、テストプロジェクトにはありません。それは、NHibernate用に別の設定ファイルを使用する必要があることを意味します。もしそうなら、私はまだ同じ問題を抱えています(私はまだ同じエラーを受け取ります)。

4

1 に答える 1

0

はい、環境ごとに異なる構成ファイル(テストとWeb)が必要です。テスト構成では、current_session_context_classをWebにするべきではありません(代わりにThreadStaticSessionContextを試してください)。

于 2012-04-24T20:56:42.073 に答える