NHibernate保存,删除,保存会产生唯一的密钥违规

时间:2009-06-25 14:21:27

标签: c# nhibernate nhibernate-mapping

我有一个场景需要在事务中执行以下操作: 1.使用唯一键保存模型 2.删除该模型 3.使用与第一个具有相同唯一键的模型保存。

我希望这可以正常工作,但我会遇到一个独特的密钥违规行为。

NH Profiler还显示在第二次插入之前未发出delete语句。

我的映射如下:

<?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 :(得分:0)

我认为你应该在删除后刷新会话。刷新会话时,更改将写入数据库。 (如果您正在使用交易,则必须在刷新会话后开始新交易)