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、これはエラーをスローしCostCode
はTextBox
から拭き取られる:
「プロキシに保存されているエンティティのラッパーが同じ プロキシを参照していません」の私の方法はありますこれを防ぐことができるので、有効なCostCode
とPhoneRecord
を返すことができますか?
あなたは遅延読み込みを使用するDBエンティティをコピーしようとしているので、それは単なるプロキシです。だから、コードがエラーを投げているのです。 https://stackoverflow.com/questions/25770369/get-underlying-entity-object-from-entity-framework-proxy非プロキシーなメソッドを提供する –
@DanilEroshenkoだから、 'var x = ObjectContext.GetObjectType( _tempRecord.GetType()); '?それは私にとって使いやすい「PhoneModel」をどうやって返しますか? – CBreeze
私はUnProxyメソッドを実際に指していました。また、私はシリアル化を使用してクローンもhttps://stackoverflow.com/questions/129389/how-do-you-do-a-deep-copy-of-an-object-in-net-c-specifically –