1

このエラーが発生しています:

------ テスト開始: アセンブリ: ECHire.Test.dll ------

テスト 'ECEHire.Test.Tests.GenerateSchema_Fixture.Can_generate_schema' が失敗しました: NHibernate.HibernateException : 初期化文字列の形式がインデックス 49 から始まる仕様に準拠していません。----> System.ArgumentException : 初期化文字列の形式が準拠していませんインデックス 49 から始まる仕様へ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

0 パス、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 を介してデータベースにクエリを実行します。

4

1 に答える 1

0

試してみるいくつかのこと:-

  1. ; を追加するのと同じくらい簡単なことでしょうか。(セミコロン) 例Integrated Security=SSPI;
  2. またはに変更してみてくださいIntegrated Security=True;
  3. または落とし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を追加し、接続文字列がキーと値のペアとして存在することを確認します

Edit2 単体テスト の場合、ローカルの 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>

あなたができるWebサイトの場合:-

cfg.Configure(HttpContext.Current.Server.MapPath("~/hibernate.cfg.xml"));

正直なところ、多くのオプションがあり、これは実際には別の問題です!

于 2012-04-17T07:50:00.957 に答える