Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 sql transactionscope行级锁定_Sql Server 2008_Entity Framework_Azure Sql Database_Transactionscope - Fatal编程技术网

Sql server 2008 sql transactionscope行级锁定

Sql server 2008 sql transactionscope行级锁定,sql-server-2008,entity-framework,azure-sql-database,transactionscope,Sql Server 2008,Entity Framework,Azure Sql Database,Transactionscope,关于在SQL Server(确切地说是SQL Azure)中锁定作用域的问题 情景 使用select语句选择一组记录。 我们翻阅记录 每个记录在transactionscope内更新- (每条记录彼此独立,不需要表锁) 我是否正确地假设上述操作将导致仅对该特定记录行的行级锁定 在一个具体例子的背景下提出问题。 在下面的示例中,itemsToMove中的每个项目是否一次锁定一个 var itemsToMove = ObjectContext.Where(emp => emp.Expirat

关于在SQL Server(确切地说是SQL Azure)中锁定作用域的问题

情景

使用select语句选择一组记录。 我们翻阅记录 每个记录在transactionscope内更新- (每条记录彼此独立,不需要表锁)

我是否正确地假设上述操作将导致仅对该特定记录行的行级锁定

在一个具体例子的背景下提出问题。 在下面的示例中,itemsToMove中的每个项目是否一次锁定一个

var itemsToMove  = ObjectContext.Where(emp => emp.ExpirationDate < DateTime.Now)                        
foreach(Item expiredItem in itemsToMove)
{               
    bool tSuccess = false;
    using (TransactionScope transaction = new TransactionScope())
    {
        try
        {               
            //We push this to another table. In this case Azure Storage.                    
            bool bSuccess = PushToBackup();             
            if(bSuccess)
            {
                ObjectContext.DeleteObject(expiredItem);
            }
            else 
            {
                //throw an exception or return 
                return false;
            }
            ObjectContext.SaveChanges();

            transaction.Complete();
            tSuccess = true;
        }
        catch (Exception e)
        {
            return cResults;
        }       
    }
}
if (tSuccess)
{
    ObjectContext.AcceptAllChanges();
}
var itemsToMove=ObjectContext.Where(emp=>emp.ExpirationDate
如果没有任何外部/包装器事务调用您的代码,则对transaction.Complete()的每次调用都应提交并释放所有锁

只是几个简短的警告

  • SQL不一定默认为行级锁定-它可以使用(但建议您将SQL留给自己的设备)
  • 请注意,新TransactionScope()的默认隔离级别为。对于您的场景来说,这可能过于悲观