我在我的项目中使用(流畅的)nhibernate。假设我有一个临时实体A存储。然后在某个时刻,更新与该实体相关的数据存储的一部分。
有没有办法知道实体A已过期/同步,以便我可以继续刷新它?
答案 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已经被某个其他事务更新,则无法更新并抛出异常。在例外情况下,您应该可以重新加载并重试。
确保在重试时使用新会话。