如何锁定SQL Server Compact数据库中的表条目?

时间:2014-01-20 13:25:26

标签: database entity-framework locking sql-server-ce

我有以下问题:

我使用SQL Server CE 4.0 DB来存储数据。数据库文件可以位于专用网络中的任何计算机上,并且应该可以由来自同一网络的多个客户端计算机访问。如果一个用户从数据库“加载”一个对象来修改它,则应该锁定该对象以防止其他客户端访问,直到“所有者”保存并由此释放对象。

所以我的(简化)数据库看起来像这样:

projects

int Project-ID      |     string SomeValue      |      bool IsLocked
--------------------------------------------------------------------
      01            |        Value1             |          false
      02            |        Value2             |           true
...
...

等等

到目前为止工作正常,但如果客户端计算机在编辑对象时崩溃,则此对象将永久锁定。为了避免这种情况,我可以想到几种方法:

  • 如果用户想要打开一个锁定的物体,他有机会解锁它,这样他就可以解锁一个他知道不会被锁定的物体。
  • 从SQL Server CE切换到“正确”的数据库,并通过服务器编程或使用触发器来管理连接和锁定。这可以安装我想避免的数据库服务器。只有应用程序应该安装在cutomer系统上。应使用简单的文件选择器选择DB的位置。
  • 我的最爱:修改对象的客户端必须在固定的时间内主动联系数据库以维持锁定。为了实现这一点,我在数据库中添加了一个列,其中锁定对象的客户端每五分钟写一个时间戳。然后,如果另一个客户端想要编辑一个时间戳超过五分钟的锁定对象,则允许他这样做,因为锁定无效。问题是:所有客户都必须使用相同的时间。

我的问题:

  • 有没有办法让SQL Server CE数据库确定参考时间?就像机器上的时间一样?
  • 有谁知道另一种锁定对象/表行的方法?也许在SQL Server CE或我使用的EF6中有相同的内置功能?

0 个答案:

没有答案