У меня вопрос о EntityFramework с использованием подхода CodeFirst. На основе исходного кода EntityConnection и документации я не могу создать его с уже открытым SqlConnection. Он требует, чтобы он был закрыт. У нас есть несколько разных уровней данных DB (nHibernate и т. Д.), И было бы хорошо, если мы можем повторно использовать одно и то же SqlConnection между ними. Но кажется, что EntityFramework не позволяет это делать. Я могу передать закрытое SqlConnection в DbContext, но мне нехорошо закрыть соединение для каждого DbContext.EntityConnection и Open SqlConnection
Есть ли способ повторно использовать открытое соединение sql?
EDIT
После EF идет в OpenSource я был в состоянии обновить его. Единственная строка, которую я изменил, находится в конструкторе класса 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();
Вы используете [этот конструктор] (http://msdn.microsoft.com/en-us/library/gg696604 (v = vs.103) .aspx)? – Eranga
Да, я попробовал, но для этого требуется закрытое соединение. –