在 EF Core 2.1 中使用环境事务时,是否需要手动关闭 DbConnection?

2023-12-09

EF Core 2.1 引入了对环境事务的支持。这sample创建一个新的SqlConnection,手动打开它并将其传递给DbContext:

using (var scope = new TransactionScope(
    TransactionScopeOption.Required, 
    new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted }))
{
    var connection = new SqlConnection(connectionString);
    connection.Open();

    try
    {
        // Run raw ADO.NET command in the transaction
        var command = connection.CreateCommand();
        command.CommandText = "DELETE FROM dbo.Blogs";
        command.ExecuteNonQuery();

        // Run an EF Core command in the transaction
        var options = new DbContextOptionsBuilder<BloggingContext>()
            .UseSqlServer(connection)
            .Options;

        using (var context = new BloggingContext(options))
        {
            context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" });
            context.SaveChanges();
        }

        // Commit transaction if all commands succeed, transaction will auto-rollback
        // when disposed if either commands fails
        scope.Complete();
    }
    catch (System.Exception)
    {
        // TODO: Handle failure
    }
}

没有电话connection.Close() though.

示例中是否缺少此部分,或者连接是否在连接时以某种方式自动关闭TransactionScope or the DbContext被处置?

编辑:调用 Close/Disposewas丢失的。我提交了拉取请求,文档现已更新。


该行为似乎与环境交易无关,但问题的答案谁拥有DbConnection传递给一个DbContext.

EF6 DbContext构造函数接受DbConnection has bool contextOwnsConnection参数来明确指定。

但是 EF Core 怎么样?上没有这个参数UseXyz方法接受DbConnection.

该规则似乎如下,取自UseSqlServer method connection参数文档:

如果连接处于打开状态,则 EF 将不会打开或关闭连接。如果连接处于关闭状态,则 EF 将根据需要打开和关闭连接。

我读过的“如果传递的连接未打开,EF Core 将取得所有权,否则所有权将留给调用者”.

由于该示例调用了connection.Open(); before UseSqlServer(connection),我假设您负责关闭/处置它,所以我认为该示例是不正确的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 EF Core 2.1 中使用环境事务时,是否需要手动关闭 DbConnection? 的相关文章

  • 从 C 中的 char* 获取单个字符

    有没有办法在 C 中逐字符遍历或从 char 中提取单个字符 考虑以下代码 现在获得单个角色的最佳方式是什么 建议我一种不使用任何字符串函数的方法 char a STRING 其他方式 char i for i a i i i points
  • “字符串”是什么意思?信息'

    我刚刚在查看定义时发现了这个PlatformNotSupportedException class 什么是string message意思是 据我所知是 是缩写Nullable lt gt but Nullable lt gt 只能应用于结
  • 如何重命名序列化对象列表后生成的 XML 属性

    我正在序列化对象列表List
  • dup2() 和 exec()

    include
  • C# 测试活动的互联网连接。 Ping google.com

    C 2008 我正在使用此代码来测试互联网连接 因为我的应用程序必须登录到网络服务器 但是 如果用户互联网连接失败或电缆被拔出 我必须通知用户 Ping www google com to check if the user has a i
  • 在 C# 中轻松创建支持索引的属性

    在 C 中我发现索引属性 http msdn microsoft com en us library aa288464 VS 71 aspx非常有用 例如 var myObj new MyClass myObj 42 hello Conso
  • C# 并行与并行线程代码性能

    我一直在测试 System Threading Parallel 与线程的性能 我很惊讶地发现并行比线程花费更长的时间来完成任务 我确信这是由于我对并行的了解有限 我刚刚开始阅读 我想我会分享一些片段 如果有人可以向我指出并行代码比线程代码
  • 增量决策树 C++ 实现

    有谁知道决策树分类器的增量实现吗 这样 当您将新实例添加到训练集中时 它可以根据现有决策树分类器以低计算量并尽可能快地生成最佳决策树分类器 换句话说 我有一个最优决策树分类器集A 其中命名为T 1 现在我想添加实例X to set A并找到
  • 在目标 VS 安装时,VSIX 扩展内部使用的 WPF-Log4Net 未输出日志

    当 Log4net 在 VSIX 扩展中使用并安装在另一个目标 VS 上时 它不会记录日志 我有一个 WPF 解决方案 我下载了 log4net dll 添加了 log4net config 并将 复制到输出目录 值设置为 始终复制 log
  • 函数指针上的未知类型 F TYPE

    include
  • 试图使用加密来混淆我的项目打破了它

    我试图尝试不同的混淆选项 为了做到这一点 我首先尝试了加密货币 以下是我遵循的步骤 打开加密向导并选择一些选项 选择我的解决方案文件 完成向导后 我看到有些 Dll 被很好地混淆了 但我的项目现在无法构建 我注意到的两件事是 我的文件夹中有
  • EF Core 一对多关系列表返回 null

    我正在尝试学习如何在 EF Core 中正确利用 DbContext 我有一个团队课程 public class Team public int ID get set public string Name get set public bo
  • 如何在Azure功能中添加razor视图文件?

    我正在创建一个应用程序 它是 azure 函数项目 我想在该项目中使用 Razor 视图 我应该在 azure 函数中使用任何模板引擎吗 得益于一些方面的进步剃刀之光项目 https github com toddams RazorLigh
  • 修改正在运行的可执行文件的资源内容

    All 我将应用程序设置存储在资源中 当我的程序首次加载时 我使用 WinAPI 读取指定的资源 然后我解析检索到的字节数据 这对我来说完美无缺 现在假设用户更改了我的应用程序中的设置 他 她检查复选框控件 我想将更新的设置保存到我的资源中
  • 除空字符串外的任何内容的正则表达式

    是否可以使用正则表达式来检测任何不是 空字符串 的内容 如下所示 string s1 string s2 string s3 string s4 etc 我知道我可以使用修剪等 但我想使用正则表达式 s 将匹配任何包含至少一个非空格字符的字
  • 如何使用 ProtoGen 从 proto 文件生成结构

    我们一直在使用 protobuf net ProtoGen 从 proto 文件生成 C cs 文件 我们希望代替类来生成结构 例如 DataContract public struct Entity1 ProtoMember 1 publ
  • C++:LPWSTR 在 cout 中打印为地址

    我有一个类型变量LPTSTR 我打印到std cout with lt lt 在 ANSI 系统中 不知道它是在哪里确定的 它工作得很好 它打印了字符串 现在 在 Unicode 系统中 我得到的是十六进制地址而不是字符串 那么 为什么LP
  • 为什么必须通过 this 指针访问模板基类成员?

    如果下面的类不是模板 我可以简单地拥有x in the derived班级 但是 通过下面的代码 我have to use this gt x Why template
  • 使用 MVC5、Ajax、C# 和 MSSQL Server 级联 DropdownList

    我对来自 Windows 窗体和三层架构的 MVC 非常陌生 我试图找出使用从数据库填充的级联下拉列表 DDL 我使用 MS SQL Server 2012 VS 2013 目前我正在研究用户调查问卷 用户可以从 DDL 的多个答案中进行选
  • asp.net mvc GET 请求上的 formcollection 应该为空

    我正在发布一个简单的操作 public void Login FormCollection formCollection 即使查询字符串值很少 formcollection Count is 0 是靠行为吗 FormCollection 使

随机推荐

  • 如何在 UICollectionViewCell 中设置 UILabel

    我有一个带有 UIViewController 的应用程序 其中包含 UICollectionView IBOutlet UICollectionView 中的单元格是 MyCustomCell 并使用此方法设置其 UILabel void
  • .NET 的 RSS 解析器 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 对于 NET 中的 RSS
  • 如何使用 Three.js 绘制平行线?

    我对矩阵变换的概念很陌生 我尝试在正交方向上偏移一条线 我想到的是 line translate offsetPixels new THREE Vector3 1 1 0 它沿着向量中定义的轴平移一条线 所以我的问题是如何定义向量中的轴以获
  • 在不同端点上实现多个协定的服务类的 WCF 配置

    我有一个MyService类实现IService1 and IService2接口 我想在两个不同的端点上公开这两个合约 例如 IService1暴露于 Service S1 IService2暴露于 Service S2 这样的配置会是什
  • 如何在vb.net中解码url

    此行表示服务器未声明 Dim DecodedString As String server UrlDecode context Request Form DeckName 我在顶部导入了 system web 似乎无法弄清楚为什么它不起作用
  • 为什么我的 hello world 二进制文件大部分为零?

    我已经编译了 include
  • 将文件分成小块复制

    我想以小块的形式复制文件 如果需要的话取消复制操作 我正在尝试遵循此处未标记的解决方案 如何复制文件并具有取消复制的功能 但我得到一个 0 字节文件 我做错了什么 Public Class Form1 Dim cancelled As Bo
  • J2ME RecordStore 中的数据不会跨会话持续存在

    我正在使用 J2ME 构建一个移动应用程序 我发现我写入 RecordStore 的数据可以在程序仍在运行时访问 但在退出并重新启动后会丢失 没有抛出异常 数据只是丢失了 UPDATE 感谢大家的建议 我在 Windows 7 上使用 Ne
  • 在 VBA 中将变量从窗体传递到模块

    我在表单上有以下按钮 Private Sub CommandButton1 Click Dim pass As String pass UserForm1 TextBox1 Unload UserForm1 End Sub 然后我有一个名为
  • Tensorflow:会话图为空。 Python

    大家好 我正在使用 Tensorflow 2 0 在这些代码行中 import tensorflow as tf hello tf constant Hello World sess tf compat v1 Session sess ru
  • 使用自签名证书在 android 中创建安全的客户端-服务器连接

    我正在开发一个企业 Android 应用程序 因此有必要在测试阶段在客户端 Android 模拟器 测试手机 和服务器之间创建安全连接 即使服务器的证书是自签名的 而购买的是合法证书由公司 目前超出我的控制范围 我需要信任服务器的自签名证书
  • Autodesk Viewer 中出现 webGL 错误

    我收到如下错误 未捕获的类型错误 无法读取 null 的属性 webglFramebuffer 当我转到与附加了 Autodesk Viewer 的页面链接的另一个页面时 我不知道它为什么会来 我在我的网站上使用 angularjs 并且该
  • 显示 JComboBox 的不可选择的默认值

    我有一个JComboBox包含三个项目 Personel Magasinier Fournisseur 我要这个JComboBox显示值 Choisir une option 这是一个不可选择的值 我之后尝试了这段代码initCompone
  • 自定义异常处理程序

    我需要编写一个自定义异常处理程序 我的应用程序可能会抛出不同类型的异常 我希望它们全部由单个处理程序处理 这样我就不需要使用数千个 try catch 块 我尝试使用AppDomain的UnhandledException处理程序 但似乎当
  • 如果Int32只是int的别名,那么Int32类怎么能使用int呢?

    一直在浏览 NET 源代码 NET框架参考源 只是为了好玩 并发现了一些我不明白的东西 有一个Int32 cs包含 C 代码的文件Int32类型 不知怎的 这对我来说似乎很奇怪 C 编译器如何编译代码Int32 type public st
  • 删除Python中变量和字符串之间的空格

    我的代码如下所示 name Joe print Hello name 我的输出看起来像 Hello Joe 如何删除之间的空格Joe and 在 python 中构造字符串有多种方法 我最喜欢的是 format 函数 print Hello
  • 下周在android上实现

    在我的示例项目中 我必须在文本视图中实现下周周一到周日 例如 5 月 6 日 gt gt 12 My 单击 下一个 按钮时 它必须显示下周的开始日期和结束日期 例如 5 月 13 日 gt gt 5 月 19 日 我已经使用以下代码实现了初
  • git diff 是否比较索引和工作副本或上次提交和工作副本?

    在git中参考 据说 一个简单的 git diff 将以统一的 diff 格式 补丁 显示自上次提交以来您在项目中更改的代码或内容尚未为下一个提交快照暂存 我所做的是提交一个包含文本的文件A 然后我将该文件中的文本从A to B并上演它 没
  • 如何修复 docker:权限被拒绝问题

    我在装有 Ubuntu 操作系统的机器上安装了 Docker 当我跑步时 sudo docker run hello world 一切都好 但我想隐藏sudo命令使命令更短 如果我写的命令没有sudo docker run hello wo
  • 在 EF Core 2.1 中使用环境事务时,是否需要手动关闭 DbConnection?

    EF Core 2 1 引入了对环境事务的支持 这sample创建一个新的SqlConnection 手动打开它并将其传递给DbContext using var scope new TransactionScope Transaction