2010-10-05 57 views
1

我正在使用ObservableCollection來包裝我生成的一些實體框架對象。 當用戶想要編輯某些值時,我打開一個包含字段的彈出式窗口,當用戶更改並按下保存時 - 更改將保存到數據庫中,並且綁定的控件將作爲可觀察集合進行更改。WPF克隆/分離對象編輯問題 - 標準是什麼?

爲了防止用戶在同一綁定對象上工作(它會導致每個綁定控件同時發生可視化更改)我想使用某些功能克隆對象,然後分離原始對象,附加克隆對象,並將其保存到數據庫。問題是克隆的對象不能正確保存到數據庫。如果我嘗試只分離對象,編輯,然後附加 - 當分離它失去了所有的父母和孩子的指稱...

WPF中的CRUD標準是什麼?我怎樣才能乾淨地編輯一個當前行,同時保持它在一個ObservableCollection?

請幫助....

奧蘭

回答

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. 然後使用這個對象及其克隆方法來建立分離編輯對象:

      ClonableObjectContainer coc = new ClonableObjectContainer(actor); 
         EntityObject editEntity = (EntityObject)coc.Data; 
    
  3. 進行更改後,分離來自ObjectContext的原始對象 ,附加克隆的對象,將其狀態更改爲EntityState.Modified和grace充分節省了:

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

希望它可以幫助... 奧蘭

編輯:如果以下不爲你工作,請繼續討論:Entity Framework Attach Exception After Clone