Скажите NHibernate, чтобы выполнить оператор вставки - PullRequest
1 голос
/ 27 марта 2012

Я использую NHibernate с Repository-Pattern.В репозиториях есть методы Insert () и Update ().Теперь Insert () вызывает Session.Save (entity), а Update () вызывает Session.Merge (entity).Мои сущности имеют для PrimaryKey следующее отображение:

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

Идентификатор назначен от меня.Теперь Session.Save (entity) сначала выполняет Select, чтобы увидеть, является ли Entity новым или уже существует.Но в случае Insert () - Case сущность всегда новая.Сейчас я ищу способ сказать NHibernate всегда делать вставку - вместо этого сначала выберите, а затем вставьте.Я видел, что могу сделать это с помощью свойства Version-но я не могу изменить схему базы данных.

Спасибо за любую помощь.

Ответы [ 3 ]

0 голосов
/ 27 марта 2012

Я думаю, что вы можете использовать session.Update () вместо session.Merge (), он не будет загружать сущность из БД.Или, возможно, вы можете использовать session.SaveOrUpdate () во всех случаях.

0 голосов
/ 27 марта 2012

Если вы хотите всегда сохранять, может быть, вы можете попробовать:

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

Затем выполните Session.SaveOrUpdate () для Insert () и Session.Merge (), затем Session.SaveOrUpdate ()для обновления ()

0 голосов
/ 27 марта 2012

Я думаю, вам следует удалить свойство unsaved-value = "0".когда вы сохраняете сущность, Nhibernate будет сравнивать идентификатор с '0'.если они не равны, Nhibernate выбирает его первым, если он не находится в сеансе.

...