传递ICloneable类会引发代理错误

时间:2017-09-07 07:40:02

标签: c# wpf entity-framework icloneable

我有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();
}

然而,这会引发错误,并CostCodeTextBox中删除PhoneRecord

  

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

有没有办法可以阻止这种情况,以便我可以传回CostCode并附上有效/NOOPTIMIZE的内容?

1 个答案:

答案 0 :(得分:0)

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

EntityFramework - Entity proxy error

...但只是自己创建一个新的实体类:

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

您不想克隆代理类。