- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下代码使用 Entity Framework 6 和托管 Oracle 提供程序来调用返回多个游标的 Oracle 存储过程。
using
语句引发以下异常:
System.ObjectDisposedException: 'Cannot access a disposed object.Object name: 'OracleConnection'.'
如果我删除 using 语句并改为使用以下帖子中的代码。我没有收到任何错误。
Using Entity Framework to Call an Oracle Stored Procedure with Multiple Cursors
为什么using语句会引发异常?有人向我建议 Oracle 托管提供程序存在错误。但是,我的同事正在使用相同的提供程序,并且他们的 using 语句工作正常。
示例代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using Oracle.ManagedDataAccess.Client;
using System.Data.Entity.Infrastructure;
namespace MyCompany
{
public class MyClass
{
private MyDbContext _dbContext = new MyDbContext();
public MyItems GetMyItems(string id)
{
var sqlQuery = "";
var oracleParameters = new List<OracleParameter>();
var oneEntityList = new List<OneEntity>();
var twoEntityList = new List<TwoEntity>();
var threeEntityList = new List<ThreeEntity>();
sqlQuery = @"
BEGIN
MY_PACKAGE.GetMyItems(:id, :p_cursor1, :p_cursor2, :p_cursor3);
END;
";
oracleParameters = new List<OracleParameter>
{
new OracleParameter("p_id", id),
new OracleParameter("p_cursor1", OracleDbType.RefCursor, ParameterDirection.Output),
new OracleParameter("p_cursor2", OracleDbType.RefCursor, ParameterDirection.Output),
new OracleParameter("p_cursor3", OracleDbType.RefCursor, ParameterDirection.Output)
};
using (var connection = _dbContext.Database.Connection)
{
connection.Open();
var command = connection.CreateCommand();
command.CommandText = sqlQuery;
command.Parameters.AddRange(oracleParameters.ToArray());
using (var reader = command.ExecuteReader())
{
oneEntityList = ((IObjectContextAdapter)dbContext).ObjectContext
.Translate<OneEntity>(reader)
.ToList();
reader.NextResult();
twoEntityList = ((IObjectContextAdapter)dbContext).ObjectContext
.Translate<TwoEntity>(reader)
.ToList();
reader.NextResult();
threeEntityList = ((IObjectContextAdapter)dbContext).ObjectContext
.Translate<ThreeEntity>(reader)
.ToList();
}
return new MyItems { OneEntity = oneEntityList, TwoEntity = twoEntityList, ThreeEntity = threeEntityList };
}
}
}
}
最佳答案
当您拥有生命周期时,在一次性对象周围使用 using
语句是正确且正确的;然而,在这种情况下:你不!这里的连接属于数据上下文,想必数据上下文本身是IDisposable
,当数据上下文被释放时,它就会释放该连接。 p>
所以:虽然您可能被允许从数据上下文中借用连接以执行查询,但您不应该尝试在此处处置它。这最终会在意外的时间关闭/处置连接,从而产生不可预测的结果。
相反:如果您有一个 var conn = new OracleConnection(...)
,那么显然您拥有该连接(除非你把它交给了管理生命周期的东西),并且你应该处置它。
只是让事情变得更加复杂......目前,您的 MyClass
似乎拥有数据库上下文,通过:
private MyDbContext _dbContext = new MyDbContext();
因此,理想情况下,您的 MyClass
应该是一次性的(: IDisposable
),并且处置 MyClass
应该级联处置 _dbContext
.
关于c# - System.ObjectDisposeException : 'Cannot access a disposed object.Object name: ' OracleConnection'. ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53483696/
建立 OraConnection 的"new"方法是什么?Microsoft 将多个类定义为已过时。 https://msdn.microsoft.com/en-us/library/system.d
我会为更多查询重用 OracleConnection 对象所以我写了一个简单的类: public static class DbConnectionsManager { ///
将 java.sql.Connection 类型转换为 OracleConnection 与从 java.sql.Connection 展开方法获取 OracleConnection 有何不同。 另外
我正在升级一个使用连接池的类。特别是界面: oracle.jdbc.OracleConnection 现在这个接口(interface)有很多方法已经被弃用了。我只是想知道这个界面是否还有其他替代方案
我正在尝试从我的新 PC 连接到我的 Oracle 数据库。我刚刚安装了 Visual Studio 和 ODAC。但是,当我尝试进行简单的连接时,我收到一个异常消息、空源、空编号,错误代码为 -21
每次我尝试调试我的程序时都会收到此错误: CS0246: The type or namespace name 'OracleConnection' could not be found (are y
我遇到了一个在互联网上找不到的问题。 我正在尝试使用 ojdbc6 连接到数据库。我从 jndi 获取资源 使用方法 public OracleConnection getConnection()
我正在使用标准的 Oracle 驱动程序连接到数据库,但我不能真正同意我同事对 OracleConnection 生命周期的看法。创建成本高吗?它是线程安全的吗?我可以在请求之间重复使用它,还是应该为
我有一个使用 Hibernate 5.1.0 的 Java 应用程序,具有在 Weblogic 12.1.1.0 和 上运行的空间功能 (geolatte) >Oracle 数据库。我有一些使用驱动程
例如 OleDbConnection 与 OracleConnection、OleDbCommand 与 OracleCommand 等... 我知道 Oracle* 类适用于 Oracle DB,但
为什么不能在下面的代码中将 java.sql.Connection 转换为 oracle.jdbc.OracleConnection? 我的主要目标是将新用户名传递给 Oracle 连接并将其保存在“
对于我的测试,我需要模拟数据客户端,在我的例子中它们是 Oracle。 我已经创建了我的数据访问层以允许传入: public static Int32? GetUserRoleId(string us
我已经尝试过WSJDBCConnection does not wrap objects of type Oracle jdbc Connection中的解决方案 但它不起作用,所以请问如何从 tom
在连接到 Oracle11g 非 RAC 的 spring-mvc 项目中的 Jboss7.1.0EAP 中运行存储过程时,我有一段代码失败。我在 JBoss 独立版中使用了 ojdbc14.jar
我有一个 WebAPI 服务,它使用 Oracle.ManagedDataAccess.dll 连接到 Oracle 数据库。每次重置应用程序池(或部署)后,第一个 OracleConnection.
IOW,是否有对此进行测试的标准方法,a la: if (! con.Open()) con.Open(); ? 更新:我想我没有提到这些是我正在使用的 Oracle 的 ODP 组件。 Orac
我有一个 native C++ 应用程序,它需要连接到 Oracle 数据库。 Oracle 数据层是用 C# 编写的,所以我希望将代码作为 DLL 重用。 我决定尝试使用托管 C++ 来弥合 nat
如果在 catch 语句中发出 System.Environment.Exit(0),在“using” block 中是否关闭了 OracleConnection? 例子: Oracl
当我尝试在我的 C# 应用程序中连接到 Oracle 数据库并尝试单击一个按钮时,出现此错误: The type initializer for 'Oracle.DataAcces.Client.Or
我在下面代码的第一行得到异常 java.lang.ClassCastException: oracle.jdbc.internal.OracleConnection$$EnhancerByProxoo
我是一名优秀的程序员,十分优秀!