知道元素是否已被保存或更新Nhibernate

时间:2018-04-04 06:29:17

标签: c# database sqlite nhibernate

我试图解决这个问题,但到目前为止我还没有找到合适的答案。 我在C#中编写SQLite数据库应用程序,在某些时候我使用session.SaveOrUpdate(object)将元素保存到数据库或更新它

但是根据已经完成的操作(保存或更新),我需要做不同的事情,所以我的问题是,如果第一次保存了对象,或者它是否已经保存,有没有办法知道使用SaveOrUpdate方法? #39;已更新?

提前致谢!

1 个答案:

答案 0 :(得分:1)

SaveOrUpdate方法无效,因此,我们必须在代码中进行检查。见:

9.4.2. Updating detached objects

我们应该在映射中提供设置unsaved-value

  

NHibernate将“新”(未保存)实例与“现有”实例区分开来   (保存或加载在上一个会话中)实例的值   他们的标识符(或版本或时间戳)属性。该   (或<version><timestamp>)的unsaved-value属性   mapping指定应将哪些值解释为表示a   “新”实例。

<id name="Id" type="Int64" column="uid" unsaved-value="0">
    <generator class="hilo"/>
</id>

因为否则:

  

如果没有为类指定unsaved-value,NHibernate将尝试   通过使用无参数创建类的实例来猜测它   构造函数并从实例中读取属性值。

下一步是检查针对isntance的设置是否会传递到SaveOrUpdate

如果我们设置unsaved-value="0",我们可以检查甚至在调用SaveOrUpdate()之前会发生什么:

entity.ID == default(int);