我有一个关于采用 CodeFirst 方法的 EntityFramework 的问题。基于 EntityConnection 源代码和文档,我无法使用已打开的 SqlConnection 创建它。它要求应该关闭。
我们有一些不同的数据库数据层(nHibernate等),如果我们可以在它们之间重用相同的SqlConnection,那就太好了。但 EntityFramework 似乎不允许这样做。我可以将关闭的 SqlConnection 传递给 DbContext,但关闭每个 DbContext 的连接对我来说并不好。
有没有办法重用打开的sql连接?
EDIT
EF 转为开源后,我能够更新它。我更改的唯一行是 System.Data.Entity.Core.EntityClient.EntityConnection 类的构造函数中的行。
if (connection.State != ConnectionState.Closed)
{
//throw new ArgumentException(Strings.EntityClient_ConnectionMustBeClosed);
}
在我评论抛出异常之后,我可以重用现有打开的SQL Connection,并且在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();
当前不支持将打开的连接传递给上下文,因为上下文内部始终使用EntityConnection http://msdn.microsoft.com/en-us/library/cc679371.aspx如果您检查文档,您会发现传递的商店连接必须处于关闭状态。
解决方法可以是在使用其他数据访问技术之前创建上下文并显式打开连接
objectContext.Connection.Open();
现在您应该可以重用SqlConnection
在上下文范围内:
var dbConnection = ((EntityConnection)objectContext.Connection).StoreConnection;
如果您正在使用 DbContext API,我建议您阅读本文 http://blogs.msdn.com/b/diego/archive/2012/01/26/exception-from-dbcontext-api-entityconnection-can-only-be-constructed-with-a-closed-dbconnection.aspx有关如何解决问题的更多详细信息DbContext
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)