Csharp/C#教程:如何撤消对自我跟踪实体所做的所有更改?分享


如何撤消对自我跟踪实体所做的所有更改?

我有一个客户端应用程序,通过WCF下载一些STE。

使用WPF应用程序,用户可以从ListBox中选择一个实体,并通过弹出的UserControl进行编辑。 由于UserControl直接绑定到对象,当用户进行更改时,它当然会影响对象。

我想提供一个取消function,它将撤消对实体所做的所有更改。

有什么想法吗?

您可以保留该实体的原始副本。 并编辑它的克隆版本。
如果用户取消更改,您只需继续使用原始副本。

我会说当你在绑定的PropertyChanged事件中使用WPF时,保存一个包含KeyName和值PropertyValue的Dictionary。 并通过使用reflection恢复状态

https://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/c12bd8c8-231f-4dcc-a665-b048f7debbd7/

我到目前为止使用此解决方案的扩展方法

using System.Collections.Generic; using System.Reflection; namespace WpfApplication4 { public static class EFExtensions { ///  /// Rejects changes made by user ///  /// Object implementing IObjectWithChangeTracker interface public static void RejectChanges(this IObjectWithChangeTracker param) { OriginalValuesDictionary ovd = param.ChangeTracker.OriginalValues; PropertyInfo[] propertyInfos = (param.GetType()).GetProperties(); foreach (KeyValuePair pair in ovd) { foreach (PropertyInfo property in propertyInfos) { if (property.Name == pair.Key && property.CanWrite) { property.SetValue(param, pair.Value, null); } } } } } } 

主要代码

上述就是C#学习教程:如何撤消对自我跟踪实体所做的所有更改?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 using System.Linq; namespace WpfApplication4 { public partial class MainWindow { public MainWindow() { InitializeComponent(); using (var db = new PlatEntities()) { PacketEPD pd = (from epd in db.PacketEPD select epd).First(); pd.ChangeTracker.ChangeTrackingEnabled = true; pd.EDNo = "1"; pd.RejectChanges(); } } } } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/983595.html

(0)
上一篇 2021年12月19日
下一篇 2021年12月19日

精彩推荐