NHibernate - 检查实体是否已过期/同步

时间:2015-03-16 21:48:23

标签: c# nhibernate fluent-nhibernate

我在我的项目中使用(流畅的)nhibernate。假设我有一个临时实体A存储。然后在某个时刻,更新与该实体相关的数据存储的一部分。

有没有办法知道实体A已过期/同步,以便我可以继续刷新它?

1 个答案:

答案 0 :(得分:1)

通常使用version列来确定它,它可以是一个数字,其中每个持久性更新数字,或者它可以是存储最后持久时间的datetime。 / p>

更新实体时,更新版本列,假设实体A,

class A
{
   int Id { get; set; }
   int Version { get; set; }
   string Name { get; set; }
}

class AMap : ClassMap<A>
{
   public AMap()
   {
      Id (x => x.Id).GeneratedBy.Native();
      Version (x => x.Version);
      Map(x => x.Name);
   }
}

当实体A更新生成的SQL时,

update A set.... where Id = ? and Version = ?

因此,如果A已经被某个其他事务更新,则无法更新并抛出异常。在例外情况下,您应该可以重新加载并重试。

确保在重试时使用新会话。