NHibernate Сохранить, Удалить, Сохранить дает нарушение уникального ключа - PullRequest
0 голосов
/ 25 июня 2009

У меня есть сценарий, в котором мне нужно сделать следующее в транзакции: 1. Сохраните модель с уникальным ключом 2. Удалить эту модель 3. Сохраните новую модель с тем же уникальным ключом, который был у первого.

Я ожидаю, что это будет работать нормально, но получаю уникальное нарушение ключа.

NH Profiler также показывает, что оператор удаления не выполняется перед второй вставкой.

Мое отображение выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHTest">
  <class name="UniqueKeyModel" table="UniqueKeyModels">
    <id name="Id">
      <generator class="hilo"/>
    </id>

    <property name="TheVal" unique-key="valuniqueness" type="System.String"></property>
  </class>
</hibernate-mapping>

Моя модель:

public class UniqueKeyModel
{
   public virtual long Id { get; private set; }
   public virtual string TheVal { get; set; }
}

Мой тестовый случай:

ISession sess = ...;

UniqueKeyModel mFirst = new UniqueKeyModel { TheVal = "value" };
sess.Save(mFirst);
sess.Delete(mFirst);

UniqueKeyModel mSecond = new UniqueKeyModel { TheVal = "value" };
sess.Save(mSecond);

1 Ответ

0 голосов
/ 25 июня 2009

Я думаю, что вы должны очистить сессию после удаления. Изменения записываются в базу данных при очистке сеанса. (Если вы используете транзакции, вы должны начать новую после очистки сеанса)

...