C# 是否有针对.NET和SQL Server的免费用户并发框架?

C# 是否有针对.NET和SQL Server的免费用户并发框架?,c#,.net,sql-server,C#,.net,Sql Server,几天前我开始思考,我可以编写一个简单的工具包来锁定(限制访问)和解锁应用程序中的资源。例如,通过打开一个项目,它将以某种方式锁定给该用户,然后当下一个人来打开它时,他们将无法修改它。或者,操作需要写入某些文件并从某些文件中读取,因此在执行操作之前,它会将这些文件(在数据库中的某些元数据记录中)锁定 现在,我已经做了相当多的设计,很明显,实际上有很多小问题:我现在要描述我需要的功能,我定义了5种不同类型的锁(所有者、写入、只读、删除、不删除)并且需要在应用于同一对象和父子层次结构的上下文中指定它们

几天前我开始思考,我可以编写一个简单的工具包来锁定(限制访问)和解锁应用程序中的资源。例如,通过打开一个项目,它将以某种方式锁定给该用户,然后当下一个人来打开它时,他们将无法修改它。或者,操作需要写入某些文件并从某些文件中读取,因此在执行操作之前,它会将这些文件(在数据库中的某些元数据记录中)锁定

现在,我已经做了相当多的设计,很明显,实际上有很多小问题:我现在要描述我需要的功能,我定义了5种不同类型的锁(所有者、写入、只读、删除、不删除)并且需要在应用于同一对象和父子层次结构的上下文中指定它们之间的关系

这将转化为大量代码来维护和测试,鉴于此,我想知道是否有任何免费的.NET库可以开箱即用地完成这类工作(我下周要去参加圣诞假期,我想其他开发人员插入一个库比完成我的tooklit并将其插入应用程序更容易)

我们正在使用C#NET和sqlserver2008r2

更新:
所谓资源,我指的是数据库中由元数据引用的文件。

很可能是您设计过度了。DBs意味着可以并发访问,并使用事务进行相互依赖的操作。 您应该重新考虑您的数据流,并允许多个用户一起工作。
例如,如果用户下载他们正在处理的项目的部分,然后一次性提交。当然,可能需要进行一些合并。根据您的任务,您还可以使用版本控制系统(SharpSVN)您描述的是一种悲观的锁定策略,而不是DB,或者与DB一起描述;最好将代码登记到数据库事务(也称为分布式事务)中,因此您的代码可以提交/回滚事务,从而释放所有锁。这可以通过使用COM+事务来实现。但是,使用乐观锁定策略可能会更好;有关更详细的答案,请参阅。

您是否考虑过将模型改为使用内置SQL?此外,您的程序的扩展性也不太好如果只是打开程序就可以解除锁定。如果员工忘记关闭程序、锁定工作站并休假两周,会发生什么情况?还有更多的问题需要解决,例如,你必须处理崩溃的客户端留下的锁,或者当另一个用户真的需要访问某个应用程序时,去吃午饭的用户留下的锁要把这样的事情做好并不容易,但我不知道有什么(自由地)可用解决方案。@Scott Chamberlain-在这种情况下,事务不适合,因为打开项目的操作可能会无限期地持续:事务实际上只适用于桌面应用程序中持续时间非常短的操作,因为打开的事务会锁定所有内容。我要说的是一组资源,用户需要无限期地声明对这些资源的某种访问级别。这种访问可以保证这些资源的某些方面,比如它们不会被删除,或者它们不会被修改。@Daniel Brückner-是的,这是一种痛苦,幸运的是,用户数量足够少,并且应用程序足以进行恢复o暂时由管理员处理。文件在共享上?是应用程序本身的文件(.e.xaml)或应用程序管理的文件。此问题不是关于锁定数据库对象,而是关于从逻辑上锁定应用程序域中的对象。用户X正在编辑项目/用户/产品Y,在完成之前,任何人都不允许进行更改。悲观锁定确保用户可以保存其更改,乐观锁定可能会告诉用户“对不起,其他人也修改了这个对象。”-现在你可以选择是强迫用户再次进行更改,还是提供一种合并工具,这本身就是一项非常重要的任务。@DanielBrückner-谢谢,你比我解释得更好。