让我们假设这个层次结构。
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被释放并可供其他用户访问。
答案 0 :(得分:2)
Fluent NHibernate是关于你的映射。有几种方法可以使用NHibernate进行数据访问。您没有指定使用哪种,但无论哪种方式,都适用相同的原则。
你所描述的是悲观锁定。在NHibernate中这样做的方法是here。我想你想使用LockMode.UPGRADE_NOWAIT
。
如果B-s只能通过A访问,那么锁定A确实就足够了。