J'ai un PhoneRecord
qui est passé à un EditWindow
afin qu'un utilisateur puisse éditer l'enregistrement. Sur chaque PhoneRecord
il y a un type de CostCode
. Sur le EditWindow
je clone un enregistrement pour casser la référence au SelectedRecord
de sorte que dans le cas où l'utilisateur clique sur annuler je peux renvoyer une version non modifiée du PhoneRecord
. Voici comment je clone: Passage ICloneable Classe throws Erreur de proxy
public ModifyPhoneRecordViewModel(PhoneRecord passedRecord)
{
SelectedRecord = passedRecord;
_tempRecord = passedRecord.Clone() as PhoneRecord;
}
Le PhoneRecord
est une classe partielle générée par EF Voici donc comment je mets en œuvre ICloneable
partial class PhoneRecord : ICloneable
{
public object Clone()
{
return (PhoneRecord)MemberwiseClone();
}
}
Lorsque l'utilisateur clique résilie sur je passe en retrait de la _tempRecord
et faire un peu traitement avec elle pour revenir à son état d'origine dans le DataGrid
/TextBoxes
:
private void ProcessCancelCommand(PhoneRecord passedRecord)
{
DataGridRecords[DataGridRecords.IndexOf(DataGridRecords.FirstOrDefault(c => c.Id == passedRecord.Id))] = passedRecord;
SelectedRecord = passedRecord;
Application.Current.MainWindow.Activate();
}
Ho wever, cela jette une erreur et le CostCode
est rayé de la TextBox
:
« L'enveloppe de l'entité stockée dans le proxy ne fait pas référence à la même proxy »
Y at-il une façon dont je peut empêcher cela afin que je puisse repasser un PhoneRecord
avec un CostCode
valide sur elle?
Vous essayez de copier l'entité DB, qui utilise le chargement paresseux et donc c'est juste un proxy. C'est pourquoi le code jette une erreur. https://stackoverflow.com/questions/25770369/get-underlying-entity-object-from-entity-framework-proxy Fournit une méthode non-proxy –
@DanilEroshenko J'ai donc besoin d'utiliser quelque chose comme 'var x = ObjectContext.GetObjectType (_tempRecord.GetType()); '? Comment cela me renvoie-t-il un «PhoneModel» utilisable? – CBreeze
Je pointais à la méthode UnProxy en fait. Aussi, je pense que Clone utilisant la sérialisation devrait également fonctionner https://stackoverflow.com/questions/129389/how-do-you-do-a-deep-copy-of-an-object-in-net-c-specifically –