1

私はNHibernate 3.2を使用しており、マッピングで「エンティティ名」を指定して、同じクラスにマッピングされた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

すべての作業に 2 つの変更が必要でした。

  1. バージョン プロパティのデフォルトの型は int であり、long ではありません。
  2. そして最も重要なこと: HBM でエンティティ名が明示的に指定されていない場合、save メソッドで指定される名前はクラスのフル ネームです。

ところで、ありがとう!

于 2013-01-14T19:54:19.330 に答える