首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >基于NOLOCK的实体框架

基于NOLOCK的实体框架
EN

Stack Overflow用户
提问于 2009-05-29 23:38:49
回答 8查看 79.1K关注 0票数 144

如何在实体框架上使用NOLOCK函数?XML是做到这一点的唯一方法吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-09-23 16:13:16

不能,但您可以启动事务并设置isolation level to read uncommited。这基本上与NOLOCK相同,但它不是在每个表的基础上执行,而是针对事务范围内的所有内容执行。

如果这听起来像你想要的,下面是你如何去做的…

代码语言:javascript
复制
//declare the transaction options
var transactionOptions = new System.Transactions.TransactionOptions();
//set it to read uncommited
transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;
//create the transaction scope, passing our options in
using (var transactionScope = new System.Transactions.TransactionScope(
    System.Transactions.TransactionScopeOption.Required, 
    transactionOptions)
)

//declare our context
using (var context = new MyEntityConnection())
{
    //any reads we do here will also read uncomitted data
    //...
    //...
    //don't forget to complete the transaction scope
    transactionScope.Complete();
}
票数 212
EN

Stack Overflow用户

发布于 2013-09-01 07:33:17

扩展方法可以使这一切变得更容易

代码语言:javascript
复制
public static List<T> ToListReadUncommitted<T>(this IQueryable<T> query)
{
    using (var scope = new TransactionScope(
        TransactionScopeOption.Required, 
        new TransactionOptions() { 
            IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted }))
    {
        List<T> toReturn = query.ToList();
        scope.Complete();
        return toReturn;
    }
}

public static int CountReadUncommitted<T>(this IQueryable<T> query)
{
    using (var scope = new TransactionScope(
        TransactionScopeOption.Required, 
        new TransactionOptions() { 
            IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted }))
    {
        int toReturn = query.Count();
        scope.Complete();
        return toReturn;
    }
}
票数 86
EN

Stack Overflow用户

发布于 2013-04-10 21:42:07

如果你需要更多的东西,我们发现比每次实际启动一个事务作用域更少侵入性的最好方法是,在创建对象上下文之后,通过运行这个简单的命令来简单地设置连接上的默认事务隔离级别:

代码语言:javascript
复制
this.context.ExecuteStoreCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;");

http://msdn.microsoft.com/en-us/library/aa259216(v=sql.80).aspx

通过这种技术,我们能够创建一个简单的EF提供程序,它为我们创建上下文,并在每次运行所有上下文时实际运行此命令,因此默认情况下我们始终处于“读取未提交”状态。

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/926656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档