2012-03-27 11 views
1

Ich verwende NHibernate mit dem Repository-Pattern. Die Repositories haben die Methoden Insert() und Update(). Nun ruft Insert() Session.Save (Entität) und Update() Session.Merge (Entität) aufrufen. Meine Entities hat für die PrimaryKey die Brache-Mapping:Sagen Sie NHibernate, um eine Insert-Anweisung auszuführen

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

Die ID von mir zugewiesen wird. Jetzt führt Session.Save (Entität) zuerst eine Auswahl durch, um zu sehen, ob die Entität neu oder bereits vorhanden ist. Aber im Insert() - Case ist die Entity immer neu. Ich suche jetzt einen Weg, um NHibernate zu sagen, immer einen Insert zu machen - stattdessen zuerst einen Select und dann einen Insert. Ich habe gesehen, dass ich das mit einer Version-Eigenschaft machen konnte - aber ich kann das Datenbank-Schema nicht ändern.

Danke für jede Hilfe.

Antwort

0

Wenn Sie wollen immer sparen, vielleicht können Sie versuchen:

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

Dann ein Session.SaveOrUpdate tun() für Insert() und ein Session.Merge() dann Session.SaveOrUpdate() für Update()

0

Ich denke, Sie sollten die Eigenschaft unsaved-value = "0" löschen. Wenn Sie die Entity speichern, vergleicht Nhibernate die ID mit '0'. Wenn es nicht gleich ist, wählt Nhibernate es zuerst aus, wenn es nicht in der Sitzung ist.

0

Ich denke, dass Sie session.Update() anstelle von session.Merge() verwenden können, wird es keine Entität von DB laden. Oder Sie können session.SaveOrUpdate() in allen Fällen verwenden.

Verwandte Themen