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

Linq to SQL:调用SubmitChanges()时的执行顺序

姜弘新
2023-03-14
问题内容

我有2个相关的数据库表,它们的简化形式如下:

Product(
  product_id,
  name
)

ProductSpecs(
  spec_id,
  product_id,
  name,
  value
)

外键是通过product_id字段设置的,并且ProductSpecs表对(product_id,name)对具有唯一约束。

现在在我的ASP.NET MVC应用程序中,当用户编辑产品规格并保存数据时,我删除了旧规格并全部插入为新规格。

为此,我首先调用DataContext.DeleteAllOnSubmit()并提供当前(旧)的ProductSpecs作为参数,然后将新的规范添加到Product.ProductSpecs集合中。

然后,我调用DataContext.SubmitChanges()并收到一个错误,指出我的唯一约束已被违反。

通过查看DataContenxt.GetChangeText()返回的SQL语句,我可以看到INSERT在DELETE之前执行(即使我在Add之前调用DeleteAllOnSubmit())。

此行为的原因是什么,以及如何解决或解决此问题?

谢谢。


问题答案:

是的,由于某种原因,Linq to SQL会将所有删除操作作为最后的操作。而且没有办法改变这一点。

也许有。我没有研究代码生成器DataContext,看看是否可以覆盖那里的内容。

您可以根据需要多次调用SubmitChanges()。首先需要删除时,我的解决方法是标记删除,调用SubmitChanges(),然后执行插入和更新,然后再次调用SubmitChanges。

您可以将所有内容包装在TransactionScope中:

    var deletables =
        from toDelete in db.NamedValues
        where toDelete.Name == knownValue.Name
        select toDelete;

    using (var scope = new TransactionScope())
    {
        db.NamedValues.DeleteAllOnSubmit(deletables);
        db.SubmitChanges();

        db.NamedValues.InsertOnSubmit(knownValue);
        db.SubmitChanges();

        scope.Complete();
    }


 类似资料:
  • 问题内容: 我使用jQuery。而且我不想在我的应用程序上进行并行AJAX调用,每个调用都必须等待上一个调用之后才能开始。如何执行呢?有帮手吗? 更新 如果我想知道XMLHttpRequest或jQuery.post的任何同步版本。但是顺序!=同步,我想要一个异步和顺序解决方案。 问题答案: 有比使用同步ajax调用更好的方法。jQuery ajax返回一个延迟,因此您可以使用管道链接来确保每个a

  • 问题内容: 我试图理解这段代码,不确定为什么第二遍在第一遍之前执行。如果有人真的可以帮助我,那就太好了! 输出: 问题答案: 您没有任何内容可以显式同步两个goroutine的顺序。如果运行足够的时间,您将看到调用以不同的顺序进行打印。当执行goroutine时,由于它们是并发操作,因此无法保证它们将何时执行和/或完成。您需要使用各种标准库程序包或通道本身来同步并发运行的goroutine的执行。

  • 问题内容: 我需要为测试设置执行顺序,因为我需要先验证一些数据。可以下订单吗? 谢谢 问题答案: 最好不要这样做。 测试应该是独立的。 要做您最想做的就是将代码放入测试调用的函数中。 像那样: 甚至拆分测试类,并将断言放入setUp函数中。 当我拆分班级时,我经常编写更多更好的测试,因为测试被拆分,并且在应该测试的所有情况下我都能看到更好的结果。

  • 问题内容: 该程序输出- 它不应该提供输出- 因为首先ai应该打印1,然后执行a.getI()并应该打印A 2 问题答案: 在此表达式中: 首先评估对的调用,然后通过连接加号形成字符串

  • 我试图理解java中完整期货的非阻塞回调性质 有了上面的代码,我总是看到下面看到的输出 线程名称ForkJoinPool.common池工人-1 thenApply Thread name main thenApply Thread name main thenAcceptThread name main Thread name main 这个顺序似乎建议主线程等待所有Futures线程的执行。

  • 问题内容: 我整天都在整理此问题,希望有人能帮助您确定我的问题。我已经使用Ajax在我的应用程序中创建了“异步进度回调”类型的功能。当我将功能剥离到测试应用程序中时,我得到了预期的结果。见下图: 所需功能 当我使用相同的代码将功能绑定到我的单页应用程序中时,出现了一种阻塞问题,其中所有请求仅在最后一个任务完成后才得到响应。在测试应用程序中,所有请求均会依次响应。服务器报告所有请求的状态(“待定”)