사용자가 레코드를 편집 할 수 있도록 EditWindow
으로 전달되는 PhoneRecord
이 있습니다. 각 PhoneRecord
에는 CostCode
유형이 있습니다. EditWindow
에서 나는 SelectedRecord
에 대한 참조를 깨기 위해 레코드를 복제하므로 사용자가 취소를 클릭하면 PhoneRecord
의 수정되지 않은 버전을 다시 전달할 수 있습니다.전달 ICloneable 클래스가 프록시 오류를 throw합니다
public ModifyPhoneRecordViewModel(PhoneRecord passedRecord)
{
SelectedRecord = passedRecord;
_tempRecord = passedRecord.Clone() as PhoneRecord;
}
PhoneRecord
그래서 여기 EF에 의해 생성 된 부분 클래스 I 사용자가 클릭하면에 ICloneable
partial class PhoneRecord : ICloneable
{
public object Clone()
{
return (PhoneRecord)MemberwiseClone();
}
}
을 구현 나는 _tempRecord
을 다시 전달 취소하고 일부 작업을 수행하는 방법입니다 : 여기에 내가 복제하는 방법이다
private void ProcessCancelCommand(PhoneRecord passedRecord)
{
DataGridRecords[DataGridRecords.IndexOf(DataGridRecords.FirstOrDefault(c => c.Id == passedRecord.Id))] = passedRecord;
SelectedRecord = passedRecord;
Application.Current.MainWindow.Activate();
}
호 : 그것은 원래의 상태가 DataGrid
/TextBoxes
에의에 그것으로 처리 되 돌리는 Wever에게,이 오류가 발생하고 CostCode
은 전멸되고 TextBox
:
가있는 방법이 있나요 "프록시에 저장된 엔터티 래퍼가 동일한 프록시를 참조하지 않습니다"나는 이것을 막을 수 있으므로
PhoneRecord
을 유효한
CostCode
과 함께 되돌릴 수 있습니까?
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 –