传递 ICloneable Class 会抛出代理错误
Passing ICloneable Class throws Proxy error
我有一个 PhoneRecord
传递给 EditWindow
以便用户能够编辑记录。在每个 PhoneRecord
上都有一种 CostCode
。在 EditWindow
上,我克隆了一条记录以中断对 SelectedRecord
的引用,这样如果用户单击取消,我可以传回 PhoneRecord
的未修改版本。这是我克隆的方式:
public ModifyPhoneRecordViewModel(PhoneRecord passedRecord)
{
SelectedRecord = passedRecord;
_tempRecord = passedRecord.Clone() as PhoneRecord;
}
PhoneRecord
是由 EF 生成的部分 class 所以我是这样实现的 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
中删除:
"The entity wrapper stored in the proxy does not reference the same
proxy"
有什么方法可以防止这种情况发生,这样我就可以传回带有有效 CostCode
的 PhoneRecord
吗?
您可以尝试不使用 MemberwiseClone()
方法来克隆您的实体:
EntityFramework - Entity proxy error
...但只需自己创建一个新实体 class:
partial class PhoneRecord : ICloneable
{
public object Clone()
{
return new PhoneRecord()
{
CostCode = this.CostCode,
//+ all other properties...
}
}
}
您不想克隆代理 class。
我有一个 PhoneRecord
传递给 EditWindow
以便用户能够编辑记录。在每个 PhoneRecord
上都有一种 CostCode
。在 EditWindow
上,我克隆了一条记录以中断对 SelectedRecord
的引用,这样如果用户单击取消,我可以传回 PhoneRecord
的未修改版本。这是我克隆的方式:
public ModifyPhoneRecordViewModel(PhoneRecord passedRecord)
{
SelectedRecord = passedRecord;
_tempRecord = passedRecord.Clone() as PhoneRecord;
}
PhoneRecord
是由 EF 生成的部分 class 所以我是这样实现的 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
中删除:
"The entity wrapper stored in the proxy does not reference the same proxy"
有什么方法可以防止这种情况发生,这样我就可以传回带有有效 CostCode
的 PhoneRecord
吗?
您可以尝试不使用 MemberwiseClone()
方法来克隆您的实体:
EntityFramework - Entity proxy error
...但只需自己创建一个新实体 class:
partial class PhoneRecord : ICloneable
{
public object Clone()
{
return new PhoneRecord()
{
CostCode = this.CostCode,
//+ all other properties...
}
}
}
您不想克隆代理 class。