【发布时间】:2011-01-04 03:55:41
【问题描述】:
我在将 POCO 所做的更改保存回数据库时遇到问题。
当应用程序启动时,我将我需要的所有对象抓取到 POCO 对象中,然后当我单击“保存”按钮时,我创建一个新的 ObjectContext 实例,然后我必须循环对象,将它们附加到上下文中,然后检测更改并保存。
public void SaveData() {
using (SolEntities sec = new SolEntities(_cxnStr)) {
foreach (ExtViews.Planet p in Planets) {
sec.CelestialBodies.Attach(p.TheBody);
sec.CelestialBodies.ApplyCurrentValues(p.TheBody);
}
sec.SaveChanges(SaveOptions.AcceptAllChangesAfterSave | SaveOptions.DetectChangesBeforeSave);
}
}
但这似乎不起作用,我可以让它工作的两种方法是:
A)在foreach 循环之前创建一个本地行星列表(强制在应用我假设的更改值之前从 Db 生成它们),并删除Attach 语句。
或者
B)切换ApplyCurrentValues这一行:
sec.ObjectStateManager.ChangeObjectState(p.TheBody, System.Data.EntityState.Modified);
但是手动强制为每个对象修改 ObjectState 似乎有点矫枉过正,特别是如果它们没有被修改,我可以在内部保留它是否被修改的东西,但我认为 ApplyCurrentValues 会在第一名?
【问题讨论】:
-
在这里查看我的答案:stackoverflow.com/questions/3635071/… 它解释了为什么您必须为每个对象设置状态 - 当使用断开连接的对象时,您必须手动进行同步。
标签: c# entity-framework poco