我有一个带NHibernate的C#应用程序,它必须通过SQL Server DB进行一些操作。
我们的目标是在同一台计算机上以及其他计算机上多次运行此应用程序。
实际应用程序在SQL表中插入一行,并检查具有最小日期的第一行是否是具有正确PID和机器名称的行,以便应用程序设置锁定并完成工作。
我们遇到此逻辑问题,因为如果保留锁定的应用程序崩溃,app还必须删除其他应用程序的锁定。
有关更改锁定架构的任何提示?
问题是app可以在多台计算机上运行。
答案 0 :(得分:3)
如何管理数据库中的锁定?您可以拥有一个表/存储过程,每个运行的实例都注册到该过程,获取唯一的ID,并使用存储过程进行锁定和释放。 (与防止来自多台机器的单个用户进行多次登录的技术相同)。
答案 1 :(得分:2)
无论
我已经实现了两种方式。
脱机锁可以与数据库一起使用,但是如果有太多进程不断等待锁定,你可能会引入颠簸(尽管一个像样的数据库服务器应该缓存信息)。此外,确保在对该表执行任何操作时使用ReadCommited事务隔离级别,并为死锁做好准备