0

我是 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 如果是这样的话,或者我正在尝试实现一些不可能的事情。

4

2 回答 2

2

试着把context.SubmitChanges();上面的decimal total = (decimal)result;

于 2012-10-02T06:55:55.910 回答
1

您的数据上下文中的数据已过时。在您提交更改之前,Linq-2-sql 不会应用挂起的更新。

因此,您需要执行以下任一操作:

decimal total = (decimal)result + detail.amount

或者您确实按照 Jan P. 的建议行事。这也将起作用,因为您自己管理交易。

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

于 2012-10-02T17:48:24.047 回答