Ser*_*nov 4 .net entity-framework sqlconnection entity-framework-4
我有一个关于使用CodeFirst方法的EntityFramework的问题.基于EntityConnection源代码和文档,我无法使用已打开的SqlConnection创建它.它要求应该关闭.我们有一些不同的数据库数据层(nHibernate等),如果我们可以在它们之间重用相同的SqlConnection,那将是很好的.但似乎,EntityFramework不允许这样做.我可以将关闭的SqlConnection传递给DbContext,但是对我来说关闭每个DbContext的连接并不好.
有没有办法重用打开的SQL连接?
编辑
EF转到OpenSource后,我能够更新它.我改变的唯一一行是在System.Data.Entity.Core.EntityClient.EntityConnection类的构造函数中.
if (connection.State != ConnectionState.Closed)
{
//throw new ArgumentException(Strings.EntityClient_ConnectionMustBeClosed);
}
Run Code Online (Sandbox Code Playgroud)
在我评论抛出异常之后,我能够重用现有的已打开的SQL连接,并且在DBContext使用它之后,它不会关闭它,并且它仍然可用于其他东西.
我的示例代码:
var connection = new SqlConnection(connectionString);
connection.Open();
MetadataWorkspace workspace = GetWorkspace(connection); // I loaded it from the same context, and save it in memory.
EntityConnection eConnection = new EntityConnection(workspace, connection);
using(var context = new EFContext(connection, false))
{
var someData = context.SomeTable.ToList();
}
connection.Close();
Run Code Online (Sandbox Code Playgroud)
目前不支持将打开的连接传递给上下文,因为上下文始终使用EntityConnection,如果检查文档,您将看到传递的存储连接必须处于关闭状态.
解决方法可以是在使用其他数据访问技术和明确打开连接之前创建上下文
objectContext.Connection.Open();
Run Code Online (Sandbox Code Playgroud)
现在,您应该能够SqlConnection在上下文的范围内重用:
var dbConnection = ((EntityConnection)objectContext.Connection).StoreConnection;
Run Code Online (Sandbox Code Playgroud)
如果您正在使用DbContext API,我建议您阅读本文以获取有关如何解决问题的其他详细信息DbContext.
| 归档时间: |
|
| 查看次数: |
5223 次 |
| 最近记录: |