Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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 le读记录并写回。如果任何其他线程试图同时读取记录并在第一个线程之后保存它,它将获得并发异常_Sql Server_Asp.net Mvc_Entity Framework 4 - Fatal编程技术网

Sql server le读记录并写回。如果任何其他线程试图同时读取记录并在第一个线程之后保存它,它将获得并发异常

Sql server le读记录并写回。如果任何其他线程试图同时读取记录并在第一个线程之后保存它,它将获得并发异常,sql-server,asp.net-mvc,entity-framework-4,Sql Server,Asp.net Mvc,Entity Framework 4,如果您不想使用时间戳,则不同的事务隔离级别对您没有帮助,因为隔离级别不会强制查询锁定记录。您必须手动编写SQL查询,并使用UPDLOCK提示通过查询锁定记录,然后执行更新。可以在存储过程中执行此操作 您描述的是悲观锁定,这一点确实没有争议。在优秀的MVC/EF教程中,有关于您想要做什么的详细说明 前面有一章是关于悲观的。您描述的是悲观锁定,这一点没有争议。在优秀的MVC/EF教程中,有关于您想要做什么的详细说明 前面有一章是关于悲观的。据我所知,如果使用乐观锁定,时间戳就可以了。在这种情况下,我

如果您不想使用
时间戳
,则不同的事务隔离级别对您没有帮助,因为隔离级别不会强制查询锁定记录。您必须手动编写SQL查询,并使用
UPDLOCK
提示通过查询锁定记录,然后执行更新。可以在存储过程中执行此操作

您描述的是悲观锁定,这一点确实没有争议。在优秀的MVC/EF教程中,有关于您想要做什么的详细说明
前面有一章是关于悲观的。

您描述的是悲观锁定,这一点没有争议。在优秀的MVC/EF教程中,有关于您想要做什么的详细说明
前面有一章是关于悲观的。

据我所知,如果使用乐观锁定,时间戳就可以了。在这种情况下,我可以使用EF的内置功能来处理并发更新。然而,我想避免两个人开始处理同一个案件的情况。(因为在这种情况下,他们两人都会想出一个解决方案,开始写一个回复(从应用程序中),在完成工作后,他们会收到boo,其他人已经解决了这个问题。)关于并发控制名称,我引用了EF4 in Action book中的内容:(半途而废的解决方案:悲观/乐观并发控制)您所描述的是悲观锁定,对此没有任何争议。你不应该自己实现锁定,让DBMS来实现。据我所知,如果我使用乐观锁定,时间戳就可以了。在这种情况下,我可以使用EF的内置功能来处理并发更新。然而,我想避免两个人开始处理同一个案件的情况。(因为在这种情况下,他们两人都会想出一个解决方案,开始写一个回复(从应用程序中),在完成工作后,他们会收到boo,其他人已经解决了这个问题。)关于并发控制名称,我引用了EF4 in Action book中的内容:(半途而废的解决方案:悲观/乐观并发控制)您所描述的是悲观锁定,对此没有任何争议。你不应该自己实现锁定,让DBMS来实现。我明白了。但在这种情况下,“卡住”的锁应该在一段时间后用机械装置清洗,不是吗?另外,除了不应该在应用程序级别执行锁定之外,我描述的解决方案还有什么问题吗?与DB锁相比,我认为我的解决方案更具弹性(尽管我对DB锁没有太多的了解;我想我描述的行为也可以通过使用它们来实现)。+1,我支持Rick的专业知识。从应用程序执行悲观锁定似乎是不对的。此外,如果您有多个static
myclassthatmanagesconccurrency
(在不同的类加载器中,在不同的机器上),我发布的解决方案可能会失败。我刚刚阅读了这篇文章,它很好地总结了我想要实现的目标:(悲观会话锁定部分)。关于我的问题——如果我错了,请纠正我——可以通过Ladislav的回答中建议的一种方法来处理竞争条件来解决。Ladislav还描述了处理并发性的两种可能方法:乐观和乐观。带有时间戳的解决方案是乐观锁定:您不锁定该行……但您可以验证是否有其他人在您读取该行时对其进行了更新。第二个解决方案是你的锁。如果可能的话,在web环境中,optmistic并发是最好的解决方案,因为您可以避免在等待更新时“阻塞一行”…更新可能永远不会到达…因为用户可能已离开会话。对不起,我之前的帖子输入错误。我的意思是:“Ladislav还描述了处理并发性的两种可能方式:乐观和悲观”……希望……无论如何,这是可以理解的……我明白了。但在这种情况下,“卡住”的锁应该在一段时间后用机械装置清洗,不是吗?另外,除了不应该在应用程序级别执行锁定之外,我描述的解决方案还有什么问题吗?与DB锁相比,我认为我的解决方案更具弹性(尽管我对DB锁没有太多的了解;我想我描述的行为也可以通过使用它们来实现)。+1,我支持Rick的专业知识。从应用程序执行悲观锁定似乎是不对的。此外,如果您有多个static
myclassthatmanagesconccurrency
(在不同的类加载器中,在不同的机器上),我发布的解决方案可能会失败。我刚刚阅读了这篇文章,它很好地总结了我想要实现的目标:(悲观会话锁定部分)。关于我的问题——如果我错了,请纠正我——可以通过Ladislav的回答中建议的一种方法来处理竞争条件来解决。Ladislav还描述了处理并发性的两种可能方法:乐观和乐观。带有时间戳的解决方案是乐观锁定:您不锁定该行……但您可以验证是否有其他人在您读取该行时对其进行了更新。第二个解决方案是你的锁。如果可能的话,在web环境中,optmistic并发是最好的解决方案,因为您可以避免在等待更新时“阻塞一行”…更新可能永远不会到达…因为用户可能已离开会话。对不起,我之前的帖子输入错误。我的意思是:“Ladislav还描述了处理并发的两种可能方式:乐观和悲观”……希望……无论如何,这是可以理解的。。
public static object _lock = new object();

public class MyClassThatManagesConcurrency
{
    public void MyMethodThatManagesConcurrency()
    {
        lock(_lock)
        {
            // query for the data
            // determine if item should be unlocked
            // dbContext.SaveChanges();
        }
    }
}