从C#Linq 4.0锁定一个数据库或一组表?

从C#Linq 4.0锁定一个数据库或一组表?,c#,linq,C#,Linq,Linq中是否有允许明确锁定数据库或一组表的工具?我正在处理一些不同的数据库,我正在寻找一些透明的东西。令我惊讶的是,除了关于Linq如何处理并发性问题的主题之外,我找不到关于这个主题的更多内容,这超出了我的范围 或者,我对锁定数据库的任何其他简单方法都感兴趣(MsSql,尤其是Sybase)锁定数据库完全超出了LINQ的范围;唯一相关的锁定方面是特定提供者用于提供并发保证的锁定语义。如果希望显式锁超出事务处理自动应用的锁,则需要转到较低的级别 要通过实体框架,您可以在数据库上下文上使用Exec

Linq中是否有允许明确锁定数据库或一组表的工具?我正在处理一些不同的数据库,我正在寻找一些透明的东西。令我惊讶的是,除了关于Linq如何处理并发性问题的主题之外,我找不到关于这个主题的更多内容,这超出了我的范围


或者,我对锁定数据库的任何其他简单方法都感兴趣(MsSql,尤其是Sybase)

锁定数据库完全超出了LINQ的范围;唯一相关的锁定方面是特定提供者用于提供并发保证的锁定语义。如果希望显式锁超出事务处理自动应用的锁,则需要转到较低的级别

要通过实体框架,您可以在数据库上下文上使用
ExecuteStoreCommand
方法,该方法只需要执行一个SQL字符串。如果出于某种原因,您使用的是较旧的LINQ2SQL提供程序,那么它也有类似的方法来实现相同的目标

实际上根本不存在“数据库锁”(至少是it数据库术语),因为整个数据库可以快速切换到独占访问模式并退出。对于Sybase(和MSSQL),具有适当权限的人可以通过设置“单用户”选项来实现这一点:

这远没有锁定那么“简单”:这意味着一次只允许一个人连接到数据库,因此您需要确保在设置选项时已连接,并且没有其他人连接(他们将在没有警告的情况下被踢出),完成后,将选项设置回关闭

在MySql中,据我所知,除了更改每个人对目标数据库的权限之外,没有其他方法可以实现这一点

锁定单个表稍微容易一些,因为大多数数据库服务器都有类似SQL的语法。在MySql中,您使用带有
READ
WRITE
锁的命令,尽管我强烈建议您阅读链接页面,因为MySql锁的工作原理(IMO)有些奇怪。Sybase同样有一个命令,在本例中称为
SHARED
EXCLUSIVE


您需要在的上下文中锁定表,因此在执行任何锁定之前,您可能需要将代码包装在
TransactionScope
中。

不确定这到底代表什么。我的理解是,我正在尝试对Sql执行Linq。我使用O/R设计器最初设置数据库上下文对象。
sp_dboption mydatabase, "single user", true