我有一个桌面客户端应用程序,它使用模式窗口来设置分层对象的属性.由于这是一个客户端应用程序,并且对DbContext的访问不是线程化的,所以我在主窗体上使用一个长时间运行的上下文,该上下文将传递给模式子级.

这些模式窗口使用PropertyGrid显示实体属性,还具有取消按钮.如果修改了任何数据并按下了"取消"按钮,更改将反映在父窗体中(我无法处理DbContext object).

如果没有调用DbContext.SaveChanges()方法,是否有方法放弃所做的任何更改?

UPDATE:实体框架4.4版.

推荐答案

把它包装成交易怎么样?

    using(var scope = new TransactionScope(TransactionScopeOption.Required,
        new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted })){

        // Do something 
        context.SaveChanges();
        // Do something else
        context.SaveChanges();

        scope.Complete();
}

.net相关问答推荐

安装特定主要版本的DotNet SDK最新版本

在 .NET 7 项目上设置 Sentry 时遇到问题

MongoDB GridFs with C#,如何存储图片等文件?

查找 2 个已知值之间的字符串

使用泛型装箱和拆箱

如何根据新的安全策略在 .Net 中发送邮箱?

控制台应用程序的退出时

如何创建只读依赖属性?

属性应该与其类型同名吗?

如何在可取消的异步/等待中处理 TransactionScope?

多个添加的实体可能具有相同的主键

解密 .NET clr20r3 异常参数 P1..P10

文件按文件名模式存在

.NET Framework SDK 和 Targeting 包有什么区别

将日期时间转换为时间跨度

在 .NET Core 中在 MVC 之外使用 Razor

对构造函数进行单元测试重要吗?

MemoryCache 不遵守配置中的内存限制

在 C# 中转义无效的 XML 字符

在 try/catch/finally 中等待的一个很好的解决方案?