NHibernate的:无法编译映射文件的.hbm.xml

问题描述:

// xml文件NHibernate的:无法编译映射文件的.hbm.xml

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        namespace="ContactDomain" 
        assembly="ContactDomain"> 

    <class name="Contact" table="tbl_contact"> 

    <id name="ContactId" column="contact_id" type="int"> 
     <generator class="identity"></generator> 
    </id> 

    <property name="FirstName" column="first_name" type="String"/> 
    <property name="LastName" column="last_name" type="String"/> 
    <property name="Email"  column="email"  type="String"/> 
    <property name="Telephone" column="telephone" type="String"/> 
    </class> 
</hibernate-mapping> 

//web.config

<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.MsSql2000Dialect" 
    /> 
     <add 
      key="hibernate.connection.driver_class" 
      value="NHibernate.Driver.SqlClientDriver" 
    /> 
     <add 
      key="hibernate.connection.connection_string" 
      value="Data Source=myServer;Initial Catalog=myDatabase;Persist Security Info=True;User ID=myDbUsername;" 
    /> 
    </nhibernate> 

//保存按钮

NHibernate.Cfg.Configuration config = new NHibernate.Cfg.Configuration(); 

    config.AddAssembly("ContactDomain"); 

    NHibernate.ISessionFactory factory = config.BuildSessionFactory(); 

    NHibernate.ISession session = factory.OpenSession(); 

    NHibernate.ITransaction transaction = session.BeginTransaction(); 


    // create contact 
    Contact contact = new Contact(); 
    contact.FirstName = txtFirstName.Text; 
    contact.LastName = txtLastName.Text; 
    contact.Email = txtEmail.Text; 
    contact.Telephone = txtTelephone.Text; 

    // Tell NHibernate that this object should be saved 
    session.Save(contact); 

    // commit all of the changes to the DB and close the ISession 
    transaction.Commit(); 
    session.Close(); 
+0

您是否试图查看InnerException以获取有关该错误的更多信息? – danyolgiax 2011-06-06 07:58:12

+0

InnerException:无法在配置中找到方言 – user754461 2011-06-06 08:00:10

+0

您可以发布HBM文件的整体而不仅仅是内部位。此外,我们可能不需要web.config – Rippo 2011-06-06 08:58:06

通过它的外观你的web.config配置不正确,所以请看下面的示例。

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

    <connectionStrings> 
     <add name="db" connectionString="Server=...;Database=...;Trusted_Connection=SSPI;"/> 
    </connectionStrings> 

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
<session-factory> 

    <property name="proxyfactory.factory_class"> 
     NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle 
    </property> 

    <property name="dialect"> 
     NHibernate.Dialect.MsSql2008Dialect, NHibernate 
    </property> 

    <property name="connection.connection_string_name">db</property> 

</session-factory> 
</hibernate-configuration> 
+0

这条线上有一个新的错误NHibernate.ISessionFactory factory = config.BuildSessionFactory();无法加载代理工厂 – user754461 2011-06-06 10:11:18

+0

您需要引用可在下载zip \ required_For_LazyLoading \ Castle \ *。dll中找到的dll – Rippo 2011-06-06 13:27:01