我正在实施一项服务,允许用户浏览各种对象,添加新对象并保存它们,这是一项非常基本的功能。该服务通过WCF提供,并首先使用EF4代码访问SQL Server数据库的数据。使用wcf服务实现锁定/编辑/解锁
但有一个问题:有一些规则应该让一个用户一次只能处理一个对象,因此标题中提到的锁定编辑解锁行为。
所以我们可以说有一个过滤器说:“在日期X和日期Y之间的时间戳记录”。现在用户锁定了这个“过滤器”,并且是唯一可以添加日期X和日期Y之间的时间范围的新记录(注意:不会修改!)。
还值得注意的是,过滤器不是我可以访问的物理实体,因为实际上可能具有无限可能的过滤器。因此“选择更新”/行锁是不可能的(我想!)。此外,过滤器仅在固定的时间范围步骤中可用,所以过滤器没有重叠,但对锁定未来(或过去)的距离没有限制。
我想出了一个迄今为止工作的解决方案,但我对此并不满意。我喜欢有,而不是某个数据库实现这个在我的服务代码,但任何建议,欢迎:
当用户请求一个锁,我首先检查是否已经有一个符合过滤器的对象并有一个“锁定”时间戳集。如果有的话,另一个锁是不可能的。如果没有,我创建一个新记录,并保存它以获得一个“处理”(一些id)到这个记录传回给客户端。在我这样做之前,我再次运行查询,并且如果我收到多个具有“锁定”时间戳集的时间范围的记录,那么包含例如“最高的ID将被视为实际锁定,所有其他记录将被删除。我不认为这是特别干净,所以我真的不想使用它。
我也想过使用WCF的operationcontract属性只允许在任何时候一次调用,但我不喜欢这一点。
因此,每个过滤器实际上是对这个数据库的查询,对吗? – Chris 2012-07-09 13:17:27
@Chris是的,你是对的! – UrbanEsc 2012-07-09 15:00:33
如果有两个过滤器触及相同的记录,会发生什么情况?你如何决定哪个过滤器获得记录? – Chris 2012-07-09 17:21:05