我试图解决这个问题,但到目前为止我还没有找到合适的答案。
我在C#中编写SQLite数据库应用程序,在某些时候我使用session.SaveOrUpdate(object)
将元素保存到数据库或更新它
但是根据已经完成的操作(保存或更新),我需要做不同的事情,所以我的问题是,如果第一次保存了对象,或者它是否已经保存,有没有办法知道使用SaveOrUpdate方法? #39;已更新?
提前致谢!
答案 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);