Linq to SQL获取事务中的更新记录

时间:2012-10-02 06:38:49

标签: c# asp.net linq linq-to-sql

我是Linq to Sql的新手。我有一个场景。我有两张桌子。 MasterTable和DetailTable表。我想做的是:

在DetailTable和DetailTable行的基础上插入新行我试图在一次交易中更新Master。

这是我的代码:

DBContext context = new DBContext();
context.Connection.Open();
context.Transaction = context.Connection.BeginTransaction();

DetailTable detail = new DetailTable();

detail.Amount = 100;

var detailTable = context.GetTable<DetailTable>();
                // pass in the object with insert on submit
                // and then submit changes
detailTable.InsertOnSubmit(detail);

var result = (from Total in context.MasterTable
select Total).Sum();

decimal total = (decimal)result; // This total is not the latest.

// UpdateMaster.....
// ................

context.SubmitChanges();
context.Transaction.Commit();

现在我遇到的问题是我没有从MasterTable获得最新的Sum。就像插入100行的新行一样,说我应该得到600但是我得到500(总和行,好像我没有插入新行)。 如果可能的话,请使用Linq to Sql告诉我是否可以使用Linq to Sql,或者我正在尝试实现无法实现的功能。

2 个答案:

答案 0 :(得分:2)

尝试将context.SubmitChanges();置于decimal total = (decimal)result;

之上

答案 1 :(得分:1)

您的datacontext中的数据是陈旧的。在您提交更改之前,Linq-2-sql不会应用挂起的更新。

所以你需要做的是:

decimal total = (decimal)result + detail.amount

或者你的确是Jan P.上面提到的。由于您自己管理交易,这也会有效。

另外:你为什么要自己打开连接?在这种情况下没有必要这样做。