0

当我运行应用程序时,我得到“Test.Student 没有持久性”错误我是 Nhibernate 映射的新手,我无法弄清楚我该
如何解决?请帮助

NHibernate 配置部分

应用程序配置

<?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 name="connection.provider">
    NHibernate.Connection.DriverConnectionProvider
  </property>
  <property name="connection.driver_class">
    NHibernate.Driver.SqlClientDriver
  </property>
  <property name="connection.connection_string">
    Server=(local);database=Student;Integrated Security=SSPI;
  </property>
  <property name="dialect">
    NHibernate.Dialect.MsSql2005Dialect
  </property>
  <!--<property name="proxyfactory.factory_class">
    NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernates
  </property>-->
  <property name="show_sql">
    false
  </property>
</session-factory>

主程序

程序.cs

  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  using NHibernate;
  using NHibernate.Cfg;
 namespace Test
  {
   class Program
    {
      static void Main(string[] args)
       {           
        ISessionFactory factor = new Configuration().Configure().BuildSessionFactory();
        if(factor!=null){
            Console.WriteLine("Configured");
        }
        else{
            Console.WriteLine("Not Configured");
        }
        Student std = new Student { Fname = "James", Lname = "Bond", Address = "32 Baker Street", Institution = "MIT" };
        using (ISession session = factor.OpenSession()) 
        {
            using (ITransaction transaction= session.BeginTransaction())
            {
                try 
                { 
                session.Save(std);
                transaction.Commit();
                session.Close();

                }
                catch(Exception e)
                {
                    Console.WriteLine("ERROR :" + e);
                }
            }           
        }               
    }
    //protected ISessionFactory factory;


    protected void execute_query()
    {

    }
}

}

映射部分

学生.hbm.xml

  <?xml version="1.0" encoding="utf-8" ?>
      <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
      <class name="Test.Student" table="Info" lazy="true">
     <id name="Id" type="int" column="Id">
       <generator class="native" />
    </id>

       <property name="Fname" column ="Fname"/>
<property name="Lname" column="Lname"/>
<property name="Address" column="Address"/>
<property name="Institution" column="Institution"/>

<!-- We don't have to specify a column name if its the same 
     as the variable name -->

4

1 回答 1

1

您需要add mapping assembly name在您的app.config文件中如此所述。

   <property name="show_sql">false</property>
   <mapping assembly="Test"/>  <!-- Here -->
</session-factory>

还要确保将 XML 文件标记为Embedded Resource没有。

于 2013-07-07T11:22:42.687 回答