我正在尝试获得一些简单的应用级锁定,我的数据库架构非常简单,只是
这将在Web应用程序和多线程的cli应用程序中使用。
目标是建立一个底层接口,以便您可以这样做:
var l = LockerThing.Create(myLockName, myOwnershipId)
l.getLock();
l.refreshLock();
l.releaseLock();
如果该键不存在锁定记录,则会创建一条记录,否则将检索该记录,然后我们会在此时与其进行交互。
我关心的是它如何与DbContext交互,特别是保存数据库更改。我想立即创建并保存对锁定对象的更新,因为锁需要由其他应用程序检查/验证,因此它不能等待。
但是,如果此类的用户碰巧在DbContext中注册了更改,他们尚未准备好提交,则保存可能会导致问题。或者更糟糕的是,它可能在一个没有提交的事务中。所有这些问题都可以通过让调用者意识到这些问题来解决,但我不希望出现这种情况。
我正在考虑锁定东西本身就是一个岛屿。它有自己的DbContext,因此它可以直接与DB一起工作。它并不真正与系统的任何其他部分交互,系统的其他任何部分也不应与锁定表交互。
对此有何看法?有什么建议?对于那些过去使用Entity Framework创建过这类内容的人,您的推荐是什么?