c#DataContext.SubmitChanges()不更新数据库

时间:2011-03-22 20:19:40

标签: c# linq datacontext

有人可以解释为什么以下代码无法更新数据库或我还可以做些什么来排除故障?

// *********************************
// People Updates
// *********************************
// In Engr and SoE
EmplIDs = InputList.GetPeopleIds(InputType.Engr | InputType.SoE);       // retrieve IDs in tables Engr and SoE
Engr = DB.GetEngrByIds(EmplIDs);                                        // retrieve objects from Engr
SoE = DB.GetSoEByIds(EmplIDs);                                          // retrieve objects from SoE
Batch.Update(SoE, Engr);                                                // update SoE with Engr data
DB.Save(SoE);                                                           // persist


// Inside DB repository
public void Save(List<SoE_People> people) {
    ChangeSet cs = dc.GetChangeSet();
    foreach (SoE_People person in people.Where(p => cs.Updates.Contains(p))) {
        person.LastUpdate = DateTime.Now;
    }

    dc.SubmitChanges();
}

我检查了以下内容:

  • people.Count~2500,cs.Updates.Count~200
  • 调用SubmitChanges()后,
  • dc.GetChangeSet.Updates.Count = 0
  • 对人物对象的所有更新都是正确的。它们在本地窗口中通过people和cs.Updates [x]
  • 可见
  • dc.SubmitChanges()
  • 不会抛出任何异常
  • 设置dc.Log = Console.Out不显示SubmitChanges()
  • 的SQL
  • 通过dc.InsertAllOnSubmit()插入新记录的代码的上一部分正常工作 - &gt;没有写入权限问题。
  • 手动剪切并将数据粘贴到SoE_People表格中 - &gt;没有外键约束问题。

4 个答案:

答案 0 :(得分:1)

如果不考虑上面的逻辑,这里有一些建议:

  • 将所有内容放入try / catch中。你怎么知道抛出没有例外?
  • dc.SaveChanges()返回一个int - CRUDed的记录数。捕获返回值并进行检查。

答案 1 :(得分:0)

您可能已在datacontext中覆盖了SoE_People更新。 应该有一个.ExecuteDynamicUpdate(实例)。

看看你可能评论/删除了它。

如果你不明白我的意思,你可以看看这里: Custom Entity Insert/Update/Delete Method Validation

答案 2 :(得分:0)

我不熟悉DataContext(不要使用它),但我会把它扔出去。

如果它像SqlDataAdapter一样,您是否编写/定义了用于插入或更新记录的SQL文本?

答案 3 :(得分:0)

也许不是代码,而是数据库表。 我有更新表使用那个SubmitChanges()的问题。 我通过给表一个主键来解决了这个问题。