传递 ICloneable 类会引发代理错误



我有一个传递给EditWindowPhoneRecord,以便用户能够编辑记录。在每个PhoneRecord上都有一种CostCode.在EditWindow我克隆一条记录以破坏对SelectedRecord的引用,以便在用户单击取消的情况下,我可以传回PhoneRecord的未修改版本。这是我克隆的方式:

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

PhoneRecord是 EF 生成的分部类,因此这是我实现ICloneable

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

当用户单击取消时,我会传回_tempRecord并对其进行一些处理以恢复到DataGrid/TextBoxes中的原始状态:

private void ProcessCancelCommand(PhoneRecord passedRecord)
{
DataGridRecords[DataGridRecords.IndexOf(DataGridRecords.FirstOrDefault(c => c.Id == passedRecord.Id))] = passedRecord;
SelectedRecord = passedRecord;
Application.Current.MainWindow.Activate();
}

但是,这会引发错误,并且CostCode将从TextBox中擦除:

"存储在代理中的实体包装器不引用相同的 代理">

有没有办法防止这种情况,以便我可以传回带有有效CostCodePhoneRecord

您可以尝试不使用MemberwiseClone()方法来克隆实体:

实体框架 - 实体代理错误

。但只需自己创建一个新的实体类:

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

您不想克隆代理类。

相关内容

  • 没有找到相关文章

最新更新