流畅的NHibernate:在多用户环境中锁定行

时间:2011-10-04 07:20:34

标签: c# nhibernate fluent-nhibernate

让我们假设这个层次结构。

public class A
{
  public int Id { get; set; }
  public IEnumerable<B> Children { get; set; }
}

public class B
{
  public A Parent { get; set; }
  public string Name { get; set; }
}

我在WinForms中创建了一个应用程序,为了数据库通信,我使用了Fluent NHibernate。多个用户可以同时使用该应用程序,但是当用户决定使用A的特定实例(或数据库中的特定行)时,我想让该行不可供其他用户访问。当用户完成该特定行的处理时,我想再次访问它。这可以实现吗?

这个想法是用户获取A然后使用其部分或全部子项(B列表)。在该阶段,A被锁定,以便其他用户无法与A的子女一起工作。当用户完成工作时,A被释放并可供其他用户访问。

1 个答案:

答案 0 :(得分:2)

Fluent NHibernate是关于你的映射。有几种方法可以使用NHibernate进行数据访问。您没有指定使用哪种,但无论哪种方式,都适用相同的原则。

你所描述的是悲观锁定。在NHibernate中这样做的方法是here。我想你想使用LockMode.UPGRADE_NOWAIT

如果B-s只能通过A访问,那么锁定A确实就足够了。