2011-03-22 137 views
1

有人可以解释为什么下面的代码无法更新数据库或我可以做什么来解决问题?c#DataContext.SubmitChanges()没有更新数据库

// ********************************* 
// 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
  • dc.GetChangeSet.Updates.Count = 0调用的SubmitChanges()之后
  • 人物对象的所有更新都是正确的。他们是通过[X]
  • 没有异常被dc.SubmitChanges()
  • 设置dc.Log = Console.Out抛出人和cs.Updates当地人窗口可见显示了的SubmitChanges()
  • 没有SQL
  • 上一段通过dc.InsertAllOnSubmit()插入新记录的代码工作正常 - >没有写权限问题。
  • 手动剪切并粘贴数据到SoE_People表中 - >没有外键约束问题。

回答

1

甚至没有寻找到你上面的逻辑,这里有一些建议:

  • 在一个try/catch将所有的东西。你怎么知道没有异常被抛出?
  • dc.SaveChanges()返回一个int - 被CRUDed的记录数。捕获返回值并检查它。
+0

- 未捕获的异常应该停止代码, - 对象浏览器显示dc.SubmitChanges()返回无效 ,但我会考虑这一点 - 谢谢。 – bob 2011-03-22 21:14:59

+0

SubmitChanges()肯定会返回一个'void' http://msdn.microsoft.com/en-us/library/bb292162.aspx – 2011-03-22 23:08:55

+0

哦,我很抱歉..我在想SaveChanges() - http:// msdn.microsoft.com/en-us/library/bb336792.aspx – Kon 2011-03-22 23:41:58

0

您可能会覆盖DataContext中的SoE_People更新。 应该有一个.ExecuteDynamicUpdate(实例)。

看看那里可能你有评论/删除。

如果您不明白我的意思,请点击此处查看: Custom Entity Insert/Update/Delete Method Validation

+0

这是一个很好的观点。在部署代码后,我添加了一些记录,这些记录覆盖了一些OnPropChanging()事件。这也可以解释为什么我没有看到来自dc.Log的任何SQL。 我在你的帖子后评论这些,但无济于事。我应该能够进入这些,看看他们是否陷入我的变化? – bob 2011-03-22 21:36:21

+0

我确实为我的表定义了接口(即 'public partial class SoE_People:IPerson {}' 但我无法想象这会干扰。 – bob 2011-03-22 21:40:23

0

我不熟悉DataContext(不要使用它),但我会把它扔到那里。

如果它像一个SqlDataAdapter,你写/定义SQL文本插入或更新您的记录?

+1

DataContext的美丽之处在于你不必编写sql :-) – bob 2011-03-22 21:39:13

+1

一旦我的公司得到这台旧的SQL 2000 Server,我**就需要学习一些Linq编程! – jp2code 2011-03-23 16:15:59