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

问题描述 投票:1回答:4

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

// *********************************
// 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()插入新记录的代码的前一部分工作正常 - >没有写入权限问题。
  • 手动剪切和粘贴数据到SoE_People表工作 - >没有外键约束问题。
c# linq datacontext
4个回答
1
投票

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

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

0
投票

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

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


0
投票

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

看那里可能你已经评论/删除了。

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.