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

时间:2010-10-05 16:33:12

标签: wpf entity-framework wpf-controls binding prism

我使用ObservableCollection来包装一些生成的实体框架对象。 当用户想要编辑某些值时,我打开一个包含字段的弹出窗口,当用户更改并按下保存时 - 更改将保存到数据库中,并且绑定的控件会更改,因为它是一个可观察的集合。

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

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

请帮助......

奥兰

1 个答案:

答案 0 :(得分:1)

好吧,我似乎找到了一个很好的解决方案。

  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. 然后使用此对象及其Clone方法创建分离的编辑对象:

             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();
    
  4. 希望它有所帮助...... 奥兰

    编辑:如果以下情况不适合您,请查看继续讨论:Entity Framework Attach Exception After Clone