我有PhoneRecord
传递给EditWindow
,以便用户可以编辑记录。每个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
中删除PhoneRecord
:
"存储在代理中的实体包装器不引用相同的实体包装器 代理"
有没有办法可以阻止这种情况,以便我可以传回CostCode
并附上有效/NOOPTIMIZE
的内容?
答案 0 :(得分:0)
您可以尝试不使用MemberwiseClone()
方法克隆您的实体:
EntityFramework - Entity proxy error
...但只是自己创建一个新的实体类:
partial class PhoneRecord : ICloneable
{
public object Clone()
{
return new PhoneRecord()
{
CostCode = this.CostCode,
//+ all other properties...
}
}
}
您不想克隆代理类。