3

This is an easy question and I want to confirm with you experts!

I am changing some values in two different tables in same database. Is it okay to just call SaveChanges one time to update all? Seems to work but I want to know if its okay or need to call context.SaveChanges after every update?

bool success = false;
TestSuiteDB context = new TestSuiteDB();

var workstyle1 = context.WorkStyle.Where(d => d.WorkStyleId==21 && d.MemberId==1).ToList();
foreach (var ws1 in workstyle1)
{
    ws1.ModuleId = flid1;
}

var workstyle2 = context.WorkStyle.Where(d => d.WorkStyleId == 22 && d.MemberId==1).ToList();
foreach (var ws2 in workstyle2)
{
    ws2.ModuleId = flid2;
}

var workstylemodules1 = context.WorkStyleModules.Where(d => d.WorkStyleModuleId == 2 && d.MemberId == 1).ToList();
foreach (var ws1 in workstylemodules1)
{
    ws1.ModuleId = flid1;
}

var workstylemodules2 = context.WorkStyleModules.Where(d => d.WorkStyleModuleId == 3 && d.MemberId == 1).ToList();
foreach (var ws2 in workstylemodules2)
{
    ws2.ModuleId = flid2;
}

if (context.SaveChanges() > 0)
{
    success = true;
}
4

3 に答える 3

4

Context.SaveChanges(); すべての更新後に一度呼び出すと、以前に行ったすべての変更が保存されます。

新しいオブジェクトを変更/挿入する予定があり、データベースの実際の値に基づいて次のオブジェクトを変更したい場合はContext.SaveChanges()、データベースが更新されるように呼び出すことができます。

エンティティへの変更/挿入はコンテキストで追跡され、SaveChanges呼び出されると、変更がデータベースにも配置されます。

これも覚えておいてください:MSDNから:

SaveChanges はトランザクション内で動作します。ダーティな ObjectStateEntry オブジェクトのいずれかを永続化できない場合、SaveChanges はそのトランザクションをロールバックし、例外をスローします。

于 2012-06-21T11:09:39.703 に答える
0

技術的には、どちらの方法でも完全に合法です。

しかし、 Habib.OSU が既に述べたように、保存しようとしているエンティティ間の依存関係など、考慮すべきことが他にもあるかもしれません。これを処理するには、いくつかの戦略があります。

また、SaveChanges()ループの反復ごとに呼び出すと、パフォーマンスに重大な問題が発生する可能性があります。

于 2012-06-21T11:33:09.687 に答える
0

ブロック実行を取得したい場合は、トランザクションコードも必要になる場合があります。

于 2012-06-21T11:19:29.900 に答える