传递 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();
}

但是,这会引发错误并且 CostCodeTextBox 中删除:

"The entity wrapper stored in the proxy does not reference the same proxy"

有什么方法可以防止这种情况发生,这样我就可以传回带有有效 CostCodePhoneRecord 吗?

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

EntityFramework - Entity proxy error

...但只需自己创建一个新实体 class:

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

您不想克隆代理 class。