2017-09-07 4 views
0

EditWindowに渡されたPhoneRecordは、ユーザーがレコードを編集できるようにしています。各PhoneRecordには、CostCodeのタイプがあります。 EditWindow私はSelectedRecordへの参照を破るためにレコードをクローンするので、ユーザがキャンセルをクリックすると、PhoneRecordの未修正バージョンを返すことができます。ここで私はクローンを作成する方法である:ICloneableクラスを渡すと、プロキシエラーが発生します

public ModifyPhoneRecordViewModel(PhoneRecord passedRecord) 
{ 
    SelectedRecord = passedRecord; 
    _tempRecord = passedRecord.Clone() as PhoneRecord; 
} 

PhoneRecordはので、ここでEFによって生成された部分クラスは、ユーザが、私は_tempRecordをバック合格取り消しといくつかの操作を行う上でクリックすると、私はICloneable

partial class PhoneRecord : ICloneable 
{ 
    public object Clone() 
    { 
     return (PhoneRecord)MemberwiseClone(); 
    } 
} 

を実装する方法ですそれに戻すことで処理がDataGrid/TextBoxesに元の状態です:

private void ProcessCancelCommand(PhoneRecord passedRecord) 
{ 
    DataGridRecords[DataGridRecords.IndexOf(DataGridRecords.FirstOrDefault(c => c.Id == passedRecord.Id))] = passedRecord; 

    SelectedRecord = passedRecord; 

    Application.Current.MainWindow.Activate(); 
} 

ホーwever、これはエラーをスローしCostCodeTextBoxから拭き取られる:

「プロキシに保存されているエンティティのラッパーが同じ プロキシを参照していません」の私の方法はありますこれを防ぐことができるので、有効なCostCodePhoneRecordを返すことができますか?

+0

あなたは遅延読み込みを使用するDBエンティティをコピーしようとしているので、それは単なるプロキシです。だから、コードがエラーを投げているのです。 https://stackoverflow.com/questions/25770369/get-underlying-entity-object-from-entity-framework-proxy非プロキシーなメソッドを提供する –

+0

@DanilEroshenkoだから、 'var x = ObjectContext.GetObjectType( _tempRecord.GetType()); '?それは私にとって使いやすい「PhoneModel」をどうやって返しますか? – CBreeze

+0

私はUnProxyメソッドを実際に指していました。また、私はシリアル化を使用してクローンもhttps://stackoverflow.com/questions/129389/how-do-you-do-a-deep-copy-of-an-object-in-net-c-specifically –

答えて

0

あなたのエンティティのクローンを作成するMemberwiseClone()メソッドを使用しないように試みることができる:

EntityFramework - Entity proxy error

...しかし、単純に新しいエンティティクラスを自分で作成します。

partial class PhoneRecord : ICloneable 
{ 
    public object Clone() 
    { 
     return new PhoneRecord() 
     { 
      CostCode = this.CostCode, 
      //+ all other properties... 
     } 
    } 
} 

あなたはしないでくださいプロキシクラスを複製したい

+0

@CBreeze:役に立つ回答を投票してください。https://stackoverflow.com/help/someone-answers – mm8

関連する問題