1

私はRepository-PatternでNHibernateを使用しています。リポジトリにはメソッド Insert() と Update() があります。ここで、Insert() は Session.Save(entity) を呼び出し、Update() は Session.Merge(entity) を呼び出します。My Entities には、PrimaryKey の次のマッピングがあります。

    <id name="Id" column="TBADRPERSON_ID" type="Int32" unsaved-value="0">       
                    <generator class="assigned"/>
    </id>

IDは私から割り当てられます。ここで、Session.Save(entity) は最初に Select を実行して、Entity が新規か既存かを確認します。しかし、Insert()-Case では、エンティティは常に新しいものです。私は今、NHibernate に常に挿入を行うように指示する方法を探しています。代わりに、最初に選択してから挿入します。Version-Property を使用してこれを実行できることを確認しましたが、Database-Schema を変更することはできません。

助けてくれてありがとう。

4

3 に答える 3

0

常に保存したい場合は、多分あなたは試すことができます:

<id name="Id" column="TBADRPERSON_ID" type="Int32" unsaved-value="any">       
                <generator class="assigned"/>
</id>

次に、Insert()に対してSession.SaveOrUpdate()を実行し、Update()に対してSession.Merge()、次にSession.SaveOrUpdate()を実行します。

于 2012-03-27T13:41:21.230 に答える
0

プロパティ unsaved-value="0" を削除する必要があると思います。entity を保存すると、Nhibernate は id を '0' と比較します。等しくない場合、Nhibernate はセッション中でなければ最初にそれを選択します。

于 2012-03-27T12:52:08.827 に答える
0

session.Merge() の代わりに session.Update() を使用できると思います。DB からエンティティをロードすることはできません。または、おそらく、すべての場合に session.SaveOrUpdate() を使用できます。

于 2012-03-27T12:54:39.787 に答える