2011-08-17 98 views
1

有一个应用程序主要是关于访问数据库。目前,它只允许单用户访问,我需要使其支持多个并发用户。问题是,无法在这些用户之间明确分离资源,所有资源必须共享:因此,有10个用户可能会打开该资源,然后1可以修改该资源。共享资源和并发用户 - .NET中的最佳实践?

是否有任何框架,库或解决此问题的最佳做法?这可能是一个非常受欢迎的问题,所以我相信应该有这些。

更新: 通过“资源”我主要是指在数据库中的数据。

更新: 更具体地讲,它的所有有关的情况下,当你有2个实体之间的主信息的依赖,一个用户打开它去除一些细节问题和其他用户打开它添加和修改的东西。第一个删除部分数据,第二个将要修改。然后发生

+0

我不认为你的问题很清楚。资源对许多不同的人来说可能意味着很多不同的东西。你能发表一个更具体的例子吗? – 2011-08-17 10:42:48

回答

1

更新行时可以使用乐观锁定。一种方法是在所有表格中添加版本列。这可能只是一个整数。基本上当你第一次查询一行时,你会得到Version列的初始值。然后,在更新该行时,将版本放入其中子句,然后还将版本与其他字段一起更新。

UPDATE Product 
SET Version = 2 /* The incremented version */,   
Name = 'UpdatedName', 
Description = 'UpdatedDescription' 
WHERE Id = 'SomeUniqueIdXXXX' 
AND Version = 1 /* The initial version */ 

第一次更新会成功,如果他们使用过时下一个更新到同一行会失败。您的应用程序应该能够处理失败并按您想要的方式继续(例如显示错误消息等)。如果您不想修改所有表格以包含版本列,则可以使用下一种技术。基本上,你把所有的原始值作为其中子句的一部分:

UPDATE 
Product 
SET Name = 'UpdatedName' 
WHERE Id = 'SomeUniqueIdXXXX' 
AND Name = 'OriginalName' 
AND Description = 'OriginalDescription' 

如果您正在使用NHibernate,这些技术可以自动为您根据您设置的映射完成。