我是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,或者我正在尝试实现无法实现的功能。
答案 0 :(得分:2)
尝试将context.SubmitChanges();
置于decimal total = (decimal)result;
答案 1 :(得分:1)
您的datacontext中的数据是陈旧的。在您提交更改之前,Linq-2-sql不会应用挂起的更新。
所以你需要做的是:
decimal total = (decimal)result + detail.amount
或者你的确是Jan P.上面提到的。由于您自己管理交易,这也会有效。
另外:你为什么要自己打开连接?在这种情况下没有必要这样做。