3

这是一个简单的问题,我想和各位专家确认一下!

我正在更改同一数据库中两个不同表中的一些值。可以只调用一次 SaveChanges 来更新所有内容吗?似乎有效,但我想知道它是否可以或需要在每次更新后调用 context.SaveChanges?

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

我认为最好调用一次。如果你想获得一个块执行,你可能还需要一个事务代码。

于 2012-06-21T11:19:29.900 回答
0

从技术上讲,无论哪种方式都是完全合法的。

但是,正如 Habib.OSU 已经说过的,可能还有更多的事情需要考虑,比如你要保存的实体之间的依赖关系。有几种策略来处理这个问题。

而且,如果您调用SaveChanges()每个循环迭代,这可能会导致严重的性能问题

于 2012-06-21T11:33:09.687 回答