gpt4 book ai didi

oracle - 对 EntityFramework 和 ado.net 存储过程使用相同的事务

转载 作者:行者123 更新时间:2023-12-02 07:09:21 25 4
gpt4 key购买 nike

我正在尝试将两段不同的代码集成到使用同一事务中。一种是 Oracle 上的 Entity Framework (使用 odp.net 作为驱动程序),另一种是使用 odp.net 使用标准 ado.net。两者都使用相同的连接字符串。

实现这一目标的正确方法是什么?

我可以使用 context.Connection.BeginTransaction() 启动 EF 事务,但这会返回 System.Data.Common.DbTransaction。

我可以直接在 odp.net 上使用它吗?我不想使用 TransactionScope,因为涉及 DTC 的所有困难。

出于多种原因,我不能简单地使用 EF 来访问此存储过程(我们正在为 EF 使用一些定制的 T4 模板,但目前不支持存储过程)。

最佳答案

嗯,我明白了。

这就是我所做的:

在使用 Entity Framework 之前我会这样做:

Context.Connection.Open();
var ts = Context.Connection.BeginTransaction();

然后我用 EF 对象做一些事情并调用 SaveChanges()。

对于 ADO.NET,我执行以下操作(只是一个示例,不是生产代码!):

   var conn = ((EntityConnection)dal.Context.Connection).StoreConnection;

var cmd2 = conn.CreateCommand();
cmd2.CommandText = "insert into tst_rob values ('3')";
cmd2.ExecuteNonQuery();

问题在于将 Context.Connection 转换为 EntityConnection 以便能够访问底层连接。

最后我执行 ts.Commit() 或 ts.Rollback()。瞧,不涉及任何 DTC,而且都在同一笔交易中。

关于oracle - 对 EntityFramework 和 ado.net 存储过程使用相同的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14241485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com