У меня есть вопрос о EntityFramework с подходом CodeFirst.Основываясь на исходном коде EntityConnection и документации, я не могу создать его с уже открытым SqlConnection.Это требует, чтобы это было закрыто.У нас есть несколько разных слоев данных БД (nHibernate и т. Д.), И было бы хорошо, если бы мы могли повторно использовать один и тот же SqlConnection между ними.Но кажется, что EntityFramework не позволяет этого делать.Я могу передать закрытое SqlConnection в DbContext, но мне не подходит закрывать соединение для каждого DbContext.
Есть ли способ повторно использовать открытое sql-соединение?
EDIT
После того, как 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();