我有一个关于使用CodeFirst方式的EntityFramework的问题。根据EntityConnection的源代码和文档,我无法创建已经打开的SqlConnection。这需要关闭SqlConnection。
我们有一些不同的数据库数据层(nHibernate等),如果我们可以在它们之间重用同一个SqlConnection就很好了。但是似乎EntityFramework不允许这样做。我可以将关闭的SqlConnection传递给DbContext,但每个DbContext都关闭连接对我来说不是很好。
有没有一种重用已打开的sql连接的方法?
编辑:
在EF成为OpenSource后,我能够更新它。我更改的唯一一行是System.Data.Entity.Core.EntityClient.EntityConnection类的构造函数中的一行。
我们有一些不同的数据库数据层(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);
}
在我抛出异常后,我可以重复使用已打开的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();