Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF“;撤销;深拷贝_C#_Wpf_Xaml_Nhibernate - Fatal编程技术网

C# WPF“;撤销;深拷贝

C# WPF“;撤销;深拷贝,c#,wpf,xaml,nhibernate,C#,Wpf,Xaml,Nhibernate,当前情况 我有一个WPF应用程序,其中我使用MVVM和NHibernate。我有一个主/详细窗口,其中有一个包含所有客户的列表框,列表框的selectedItem是用于在detail屏幕中显示客户详细信息的对象。 在detailscreen中,我有一个添加、编辑、删除、保存和撤销按钮。一切都与我设置的绑定一起工作 问题 但对于“撤消”按钮,我考虑复制原始客户对象,因此当我单击“撤消”按钮时,字段将重置为原始值中的值。但是在我的customer对象中,我有一个Address对象,通过浅拷贝,这两个

当前情况

我有一个WPF应用程序,其中我使用MVVM和NHibernate。我有一个主/详细窗口,其中有一个包含所有客户的列表框,列表框的selectedItem是用于在detail屏幕中显示客户详细信息的对象。 在detailscreen中,我有一个添加、编辑、删除、保存和撤销按钮。一切都与我设置的绑定一起工作

问题

但对于“撤消”按钮,我考虑复制原始客户对象,因此当我单击“撤消”按钮时,字段将重置为原始值中的值。但是在我的customer对象中,我有一个Address对象,通过浅拷贝,这两个对象将保持对该对象的相同引用。因此,当我从Address对象更改字段时,原始客户地址也将更改。我曾考虑对我的客户地址进行深度复制,但我无法使我的对象可序列化(我无法控制更改模型对象)

  • 有没有办法在没有序列化的情况下进行深度复制
  • 还是有一些标准的方法来实现我想要实现的行为

我只需返回数据库并重新加载customer对象。这样可以确保您显示的数据与数据库中的数据一致,并降低并发问题的风险。

我没有这样想过,但我认为这不是最佳做法?但我认为它肯定会帮我完成这项工作,我会尝试一下,向用户展示最新数据是最佳实践,除非有重要的性能原因需要这样做。它也更容易编码,更不容易出现错误。我已经尝试过了,但我注意到,当我回到数据库时,我想让同一个对象拥有它的副本,似乎我没有第二个单独的对象和旧值。我想nhibernate知道我已经在用那个东西了,就用那个。。。对此有什么想法吗?如果您在同一个ISession中加载,那么NHibernate将从缓存而不是数据库中获取对象。要强制它返回数据库,请调用session.execut(myObject),然后重新加载。另见。谢谢你把我带到了正确的方向。我已经使用了session.Refresh(myObject),现在一切都正常了!:)