【问题标题】:handle transaction in Linq to sql在 Linq to sql 中处理事务
【发布时间】:2011-01-22 06:00:10
【问题描述】:

我正在实现 asp.net MVC Web 应用程序,我在其中使用 Linq to Sql 来操作数据库中的数据。但在我的一个行动中,我想通过引用以前的插入 ID 来插入多个相互依赖的表条目。所以我只是想知道如何处理事务,比如开始事务、提交、回滚等等,就像在 ADO.net 中一样。如何管理这个。如果其中一个插入在操作过程中崩溃了怎么办?

注意:- 我在这里没有使用存储过程。我正在使用 Lambda 表达式和方法。这些也用于不同的管理器类。 示例: 对于创建主题 - 在 SubjectManager 类中使用方法插入主题信息,返回主题 ID。在这个 subjectid 中,我将使用管理器类中的另一种方法作为 ChapterManager 插入它的章节。它再次返回 ChapterId,基于这个 chapeter Id,插入章节的主题。再次使用与上面相同的主题管理器。在每个管理器类中,我正在为相同的创建 dataContext 对象。我在控制器中的一个操作中控制所有这一切。但担心事务管理。我怎么能在这里使用?

【问题讨论】:

    标签: linq-to-sql asp.net-mvc-2 transactions


    【解决方案1】:

    DataContext 已经包含一个嵌入式事务对象。例如,假设您正在为客户下一个新订单。您可以设置您的模型,以便以下代码使用单个 SubmitChanges 更新 Customer 和 Order 表。只要两个表之间存在外键关系,嵌入式事务对象就会在同一个事务中处理客户更新和订单插入。使用 TransactionScope 对象来封装单个 DataContext 是多余的:

    using (DataContext dc = new DataContext())
    {
        Order order = new Order();
    
        order.ProductID = 283564;
        order.Quantity = 7;
        order.OrderDate = DateTime.Now;
    
        Customer customer = dc.Customers.Single(c => c.CustomerID == 6);
    
        customer.LastUpdate = order.OrderDate;
        customer.Orders.Add(order);
    
        dc.SubmitChanges();
    }
    

    【讨论】:

      【解决方案2】:

      删除代码以支持 Neil 的回答

      【讨论】:

      • 谢谢,它适用于所有的数据操作吗?
      • 是的,TransactionScope 中的所有内容都包含在事务中。您唯一需要注意的是数据上下文。我认为您只能在一个范围内拥有一个。我将更新代码以显示更多信息。
      • 在同一个 DataContext 块中调用多个 SubmitChanges 时会遇到问题。内置的更改跟踪机制不能也不会保证一旦发生更改后数据的完整性,因为它不会在更改后更新对象。
      • 是的,你是对的,尼尔。我赞成您的回答而不是我的回答,并删除了我的代码。谢谢:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 2011-02-11
      • 2021-09-10
      • 1970-01-01
      • 2010-10-19
      相关资源
      最近更新 更多