当前位置: 首页 > 面试题库 >

LINQ to SQL:并发解析

卓嘉良
2023-03-14
问题内容

鉴于此LINQ to SQL:

using (var db = Database.Context)
{
    var root = (from post in db.Post
                where post.Id == rootPostId
                select post).Single();

    root.LastActivityUtc = DateTime.UtcNow;

    db.SubmitChanges();
}

如果使用相同的rootPostId再次调用同一方法(此代码所在的位置)并发更改同一记录,将会发生什么情况?会抛出异常吗?

在这种情况下(并发冲突),我想通过简单地放弃所做的更改来处理它,以便仅提交对LastActivityUtc的一个更新,而不是同时提交这两个更新,无论如何更新都将具有相同的值。


问题答案:

您可以通过捕获ChangeConflictException来检测并解决您的并发问题:

using (var db = new MyDataContext())
{
    var root = (from post in db.Post
                where post.Id == rootPostId
                select post).Single();

    root.LastActivityUtc = DateTime.UtcNow;

    try
    {
        db.SubmitChanges();
    }
    catch (ChangeConflictException)
    {
        db.ChangeConflicts.ResolveAll(RefreshMode.KeepChanges);
        db.SubmitChanges();
    }
}

使用RefreshMode
.KeepChanges,您将保留客户端对象的所有更改,并且来自其他用户的其他字段的更改将被合并。



 类似资料:
  • 本文向大家介绍Java 高并发十: JDK8对并发的新支持详解,包括了Java 高并发十: JDK8对并发的新支持详解的使用技巧和注意事项,需要的朋友参考一下 1. LongAdder 和AtomicLong类似的使用方式,但是性能比AtomicLong更好。 LongAdder与AtomicLong都是使用了原子操作来提高性能。但是LongAdder在AtomicLong的基础上进行了热点分离,

  • 本文向大家介绍详解go语言的并发,包括了详解go语言的并发的使用技巧和注意事项,需要的朋友参考一下 1、启动go语言的协程 2、runtime.Goexit()方法。立即终止当前的协程 3、runtime.GOMAXPROCS()表示go使用几个cpu执行代码 4、管道定义和创建管道 5、管道的缓冲 6、关闭管道和接受关闭管道的信号 7、只读管道和只写管道和生产者和消费者模型 8、Timer定时器

  • 本文向大家介绍Java并发 synchronized锁住的内容解析,包括了Java并发 synchronized锁住的内容解析的使用技巧和注意事项,需要的朋友参考一下 synchronized用在方法上锁住的是什么? 锁住的是当前对象的当前方法,会使得其他线程访问该对象的synchronized方法或者代码块阻塞,但并不会阻塞非synchronized方法。 脏读 一个常见的概念。在多线程中,难免

  • 问题内容: 我无法终生弄清楚自己在做什么错。似乎应该很简单,因为我找不到其他人遇到这个问题,但是我不知道要通过javascript(jQuery)将基本数据发送到PHP并对其进行解码。为了简单起见,这就是我所拥有的: JAVASCRIPT 和我的PHP文件 我正在写的文件最终没有任何内容。如果我这样做: 我得到了一个带有单词test的文件,但是无论我做什么,我都没有得到发送的json数据。 有人可

  • 本文向大家介绍JAVA如何解决并发问题,包括了JAVA如何解决并发问题的使用技巧和注意事项,需要的朋友参考一下 并发问题的根源在哪 首先,我们要知道并发要解决的是什么问题?并发要解决的是单进程情况下硬件资源无法充分利用的问题。而造成这一问题的主要原因是CPU-内存-磁盘三者之间速度差异实在太大。如果将CPU的速度比作火箭的速度,那么内存的速度就像火车,而最惨的磁盘,基本上就相当于人双腿走路。 这样

  • 本文向大家介绍java并发编程之cas详解,包括了java并发编程之cas详解的使用技巧和注意事项,需要的朋友参考一下 CAS(Compare and swap)比较和替换是设计并发算法时用到的一种技术。简单来说,比较和替换是使用一个期望值和一个变量的当前值进行比较,如果当前变量的值与我们期望的值相等,就使用一个新值替换当前变量的值。这听起来可能有一点复杂但是实际上你理解之后发现很简单,接下来,让