1

Visual Studio で NHibernate を試すための小さなアプリをセットアップしようとしていますが、うまくいきません。

私が得るエラーは次のとおりです。「構成で方言が見つかりませんでした」。

app.config と hibernate.cfg.xml の両方で設定を指定しようとしましたが、どちらも機能していないようです。これらのファイルは、アプリのソースと同じディレクトリにあります (他のディレクトリも試しました)。hibernate.cfg.xml のビルド アクションを「埋め込みリソース」として設定しようとしましたが、それも役に立ちませんでした。これらの構成ファイルを完全に削除しても、同じエラー メッセージが表示されます。

私はネット上でさまざまな例を見てきましたが、それを分類することはできません.何が問題なのか知っている人はいますか?

ここに私のアプリケーションソース、app.config および hibernate.cfg.xml があります

アプリケーション ソース

using NHibernate;
using NHibernate.Cfg;

namespace Timer
{
    public partial class Form1 : Form
    {
        Configuration cfg;
        ISessionFactory factory;
        ISession session;
        ITransaction transaction;

        public Form1()
        {
            cfg = new Configuration();
            //cfg.AddAssembly("Timer");
            //cfg.AddFile("WorkoutSet.hbm.xml");

            factory = cfg.BuildSessionFactory();
            session = factory.OpenSession();
            transaction = session.BeginTransaction();

            InitializeComponent();
        }
    }
}

App.Config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section
          name="nhibernate"
          type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
        />
        <section
            name="log4net"
            type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" 
        />

    </configSections>

    <nhibernate>
        <add
          key="hibernate.connection.provider"
          value="NHibernate.Connection.DriverConnectionProvider"
        />
        <add
          key="hibernate.dialect"
          value="NHibernate.Dialect.FirebirdDialect"
        />
        <add
          key="hibernate.connection.driver_class"
          value="NHibernate.Driver.FirebirdClientDriver"
        />
        <add
          key="hibernate.connection.connection_string"
          value="User=sysdba;Password=masterkey;Database=C:\X\Test\Timer\Timer.FDB;Dialect=3;ServerType=1;"
        />
    </nhibernate>

    <log4net debug="false">

        <!-- Define some output appenders -->
        <appender name="trace"
              type="log4net.Appender.TraceAppender, log4net">
            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern"
                     value="%d{ABSOLUTE} %-5p %c{1}:%L - %m%n" />
            </layout>
        </appender>

        <appender name="console"
              type="log4net.Appender.ConsoleAppender, log4net">
            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern"
                     value="%d{ABSOLUTE} %-5p %c{1}:%L - %m%n" />
            </layout>
        </appender>

        <appender name="rollingFile"
              type="log4net.Appender.RollingFileAppender,log4net" >

            <param name="File" value="h:\log.txt" />
            <param name="AppendToFile" value="false" />
            <param name="RollingStyle" value="Date" />
            <param name="DatePattern" value="yyyy.MM.dd" />
            <param name="StaticLogFileName" value="true" />

            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern"
                  value="%d [%t] %-5p %c - %m%n" />
            </layout>
        </appender>

        <!-- Setup the root category, add the appenders and set the default priority -->
        <root>
            <priority value="DEBUG" />
            <appender-ref ref="console" />
        </root>

        <logger name="NHibernate">
            <level value="DEBUG" />
        </logger>


    </log4net>


    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <qualifyAssembly partialName="FirebirdSql.Data.FirebirdClient"
                fullName="FirebirdSql.Data.FirebirdClient, Version=2.0.1.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c" />
        </assemblyBinding>
    </runtime>
</configuration>

hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section
          name="nhibernate"
          type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
    />
    </configSections>

    <nhibernate>
        <add
          key="hibernate.connection.provider"
          value="NHibernate.Connection.DriverConnectionProvider"
    />
        <add
          key="hibernate.dialect"
          value="NHibernate.Dialect.FirebirdDialect"
    />
        <add
          key="hibernate.connection.driver_class"
          value="NHibernate.Driver.FirebirdClientDriver"
    />
        <add
          key="hibernate.connection.connection_string"
          value="User=sysdba;Password=masterkey;Database=C:\X\Test\Timer\Timer.FDB;Dialect=3;ServerType=1;"
    />
    </nhibernate>
</configuration>
4

3 に答える 3

3

わかりました、みんなありがとう、私は今それを整理しました。hibernate.cfg.xml を処理するために cfg.Configure() を呼び出す必要があったようです...一度これを行うと、他にもいくつかのエラーがありましたが、それらはすべて理にかなったエラーメッセージで修正するのが非常に論理的でした.

これが機能した初期化コードです。

public Form1()
{
    cfg = new Configuration();
    cfg.Configure();

    factory = cfg.BuildSessionFactory();
    session = factory.OpenSession();
    transaction = session.BeginTransaction();

    InitializeComponent();
}
于 2008-12-21T19:12:59.230 に答える
1

NHibernate 2.0 を使用しているが、1.2 を参照する手順に従っている場合、構成 xml が変更されており、これが問題の原因となっています。

試してください (app.config でconfigSections、スタンドアロン ファイルの場合は省略します):

  <configSections>
    <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/>
  </configSections>
  <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
      <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
      <property name="dialect">NHibernate.Dialect.FirebirdDialect</property>
      <property name="connection.driver_class">NHibernate.Driver.FirebirdClientDriver</property>
      <property name="connection.connection_string">User=sysdba;Password=masterkey;Database=C:\X\Test\Timer\Timer.FDB;Dialect=3;ServerType=1;</property>
    </session-factory>
  </hibernate-configuration>
于 2008-12-19T03:42:57.957 に答える
0

cfg.構成();

本当に助かりました...どうもありがとう。以前私が使用していた

cfg.AddAssembly(Assembly.GetCallingAssembly());

成功せずに

于 2009-12-07T07:40:27.630 に答える