代码之家  ›  专栏  ›  技术社区  ›  OrPaz

WPF克隆/分离对象编辑问题-标准是什么?

  •  1
  • OrPaz  · 技术社区  · 15 年前

    我正在使用ObservableCollection包装一些生成的实体框架对象。 当用户想要编辑一些值时,我会打开一个包含字段的弹出窗口,当用户更改并按save键时,更改被保存到数据库中,绑定的控件是更改,因为它是一个observeCollection。

    为了防止用户使用同一个绑定对象(这会导致每个绑定控件同时发生视觉变化),我想使用一些功能克隆对象,然后分离原始对象,附加克隆对象,并将其保存到数据库。问题是克隆的对象没有正确保存到数据库中。如果我只尝试分离对象,编辑然后附加-当分离时,它会丢失所有父对象和子对象的引用。。。

    WPF的积垢标准是什么?如何在将当前行保存在ObservableCollection中的同时干净地编辑该行?

    奥兰

    1 回复  |  直到 15 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    看来我找到了一个好办法。

    1. public class ClonableObjectContainer : Object , ICloneable
      {
          private Object data;
      
          public ClonableObjectContainer(Object obj)
          {
              data = obj;
          }
      
          public Object Data
          {
              get { return data; }
          }
      
          public object Clone()
          {
              return (ClonableObjectContainer)this.MemberwiseClone();
          }
      }
      
    2. 然后使用此对象及其克隆方法创建分离的编辑对象:

               ClonableObjectContainer coc = new ClonableObjectContainer(actor);
               EntityObject editEntity = (EntityObject)coc.Data;
      
    3. 执行更改后,从ObjectContext中分离原始对象 ,附加克隆对象,将其状态更改为 EntityState.Modified 优雅地保存:

              ContextManager.CurrentObjectContext.Detach(oldItem);
              ContextManager.CurrentObjectContext.Attach((IEntityWithKey)item);
              ContextManager.CurrentObjectContext.ObjectStateManager.ChangeObjectState(item, EntityState.Modified); 
              ContextManager.Save();
      

    希望对你有帮助。。。 奥兰

    编辑: 如果以下内容对您无效,请检查后续讨论: Entity Framework Attach Exception After Clone

    推荐文章