1

我正在使用 NHibernate 3.2 并为同一个类映射了两个表,在映射中指定了“实体名称”。麻烦的是,当我使用ISession中的方法来表示实体名称时,NHibernate坚持自己扣除,忽略了我的规范。

这是我的单元测试中的代码:

public class Cliente
{
    public virtual Guid UID { get; set; }
    public virtual long Revisao { get; set; }
    public virtual string Nome { get; set; }
    public virtual DateTime DataNascimento { get; set; }
}

  <class name="Cliente">
    <id name="UID">
      <generator class="guid"/>
    </id>
    <version name="Revisao" />
    <property name="Nome" />
    <property name="DataNascimento" />
  </class>

  <class name="Cliente" entity-name="ClienteAudit" schema="audit">
    <composite-id>
        <key-property name="UID" />
        <key-property name="Revisao" />
    </composite-id>
    <property name="Nome" />
    <property name="DataNascimento" />
  </class>   

 var cliente = new Cliente {DataNascimento = DateTime.Parse("1988/07/09"), Nome = "Heber Senger"};
        using (var ss = sf.OpenSession())
        {
            ss.Save("Cliente", cliente);
            ss.Flush();
        }

NHibernate 坚持将实体保存为“ClienteAudit”(我在侦听器和表中验证),并且我明确告知实体名称为“Cliente”。

我只是尝试: - 在 Cliente 映射中指定实体名称;- 在方法save中省略名称,让NHibernate自由发现名称,再次在“ClienteAudit”中暗示;- 现在我正在研究SessionImpl等的内部代码。

如果有人可以提供帮助,那就太好了。谢谢。

4

1 回答 1

0

所有工作都需要进行两项更改:

  1. 版本属性的默认类型是 int 而不是 long;
  2. 最重要的是:当实体名称没有在 HBM 中明确指出时,save 方法中指定的名称是类的全名。

顺便说一句,谢谢!

于 2013-01-14T19:54:19.330 回答