【问题标题】:NHibernate Oracle mapping problemNHibernate Oracle 映射问题
【发布时间】:2010-01-02 12:01:11
【问题描述】:

在说明问题之前,请看代码

数据库(Oracle)SQL:

create table test_tab(
 id number,
 Name varchar2(50)
);

C#中对应的类:

public class TestTable
    {
        private long id;
        public virtual long Id {
            get {
                return id;
            }
            set {
                id = value;
            }
        }

        private string name;
        public virtual string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
    }

此映射文件:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DataTransfer" namespace="DataTransfer">
  <class name="DataTransfer.Models.TestTable, DataTransfer" table="TEST_TAB">
    <id name="Id" column="ID" type="long" unsaved-value="0">
      <generator class="sequence">
        <param name="sequence">
          seq_test
        </param>
      </generator>
    </id>
    <property name="Name" column="NAME" type="string" not-null="false"/> 
  </class>
</hibernate-mapping>

“TestTable”类位于 DataTransfer 项目下的 Models 文件夹

休眠配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<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.OracleClientDriver</property>
    <property name="connection.connection_string">Data Source=xe;Persist Security Info=True;User ID=hr;Password=hr;Unicode=True</property>
    <property name="show_sql">false</property>
    <property name="dialect">NHibernate.Dialect.Oracle9Dialect</property>
    <!-- mapping files -->
    <mapping assembly="DataTransfer" />
  </session-factory>
</hibernate-configuration>

这是我的 DataAccessLayer 代码;

public void AddToTestTable(Test_Tab user)
        {
            using (ISession session = GetSession())
            {
                using (ITransaction tx = session.BeginTransaction())
                {
                    try
                    {
                        session.Save(user);
                        session.Flush();
                    }
                    catch (NHibernate.HibernateException)
                    {
                        tx.Rollback();
                        throw;
                    }
                }
            }
        }

现在的问题是当我向数据库中插入任何值(使用简单的 ASP.NET 表单)时,什么也没有发生(甚至没有例外!)。但是当我没有为 TestTable 类使用“模型”文件夹和为映射文件使用“映射”文件夹时,它工作得很好。请帮帮我。

【问题讨论】:

  • 如何将实体插入/添加到数据库?你能显示一些代码吗?例如,您是否刷新会话?或者,你是如何配置flushmode的?
  • 糟糕!!!!!!!!!我发现了我的问题!
  • 弗林特先生,如果您找到了解决方案,您应该创建一个“答案”并接受它,以便后代从中受益。

标签: c# asp.net nhibernate oracle10g


【解决方案1】:

确保.hbm.xml 映射文件作为资源嵌入到程序集DataTransfer 中。

【讨论】:

  • 当映射不作为资源嵌入时,NH 将抛出异常,因为它将类视为“非持久”类。换句话说:它会抛出异常,因为它不知道如何持久化实体。
猜你喜欢
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 2010-10-11
  • 1970-01-01
相关资源
最近更新 更多