0

LinqtoSqlは初めてです。シナリオがあります。2つのテーブルがあります。MasterTableおよびDetailTableテーブル。私がやろうとしていることは:

DetailTableに新しい行を挿入し、DetailTableの行に基づいて、1つのトランザクションでマスターを更新しようとしています。

これが私のコードです:

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

datacontextのデータは古くなっています。Linq-2-sqlは、submitchangesの前に保留中の更新を適用しません。

したがって、実行する必要があるのは次のいずれかです。

decimal total = (decimal)result + detail.amount

または、JanP.が上記で提案したことを実際に実行します。トランザクションを自分で管理しているので、これも機能します。

さらに:なぜ自分で接続を開くのですか?この場合、そうする必要はありません。

于 2012-10-02T17:48:24.047 に答える