Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 保存POCO更改_C#_Entity Framework_Poco - Fatal编程技术网

C# 保存POCO更改

C# 保存POCO更改,c#,entity-framework,poco,C#,Entity Framework,Poco,我无法将对POCO的更改保存回数据库 当应用程序启动时,我将需要的所有对象抓取到POCO对象中,然后当我单击“保存”按钮时,我创建一个新的ObjectContext实例,然后我必须循环对象,将它们附加到上下文,然后检测更改并保存 public void SaveData() { using (SolEntities sec = new SolEntities(_cxnStr)) { foreach (ExtViews.Planet p in Pla

我无法将对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
sament。 或 B) 切换此选项的
ApplyCurrentValues
行:

sec.ObjectStateManager.ChangeObjectState(p.TheBody, System.Data.EntityState.Modified);

但是手动强制修改每个对象的ObjectState似乎有点过分了,特别是如果它们没有被修改,我可以在内部保留它是否被修改的信息,但我认为ApplyCurrentValues首先会这样做?

Poco对象无法跟踪更改。只有实体派生的对象可以跟踪更改,否则您必须生成自跟踪对象或从将跟踪更改的自定义类派生poco对象

您可以钩住自己对象的属性更改事件,或者以这样的方式生成代码,将更改存储在某个本地存储库中,如果提交更改成功,您可以清空该存储库

-建议使用

context.ObjectStateManager.TryGetObjectStateEntry(newItem, out entry);
也有看

检查我的答案:它解释了为什么您必须为每个对象设置状态-当使用断开连接的对象时,您必须手动执行同步。