Entity Framework 4: Сколько стоит создание EntityConnection? - PullRequest
3 голосов
/ 25 марта 2011

Сколько стоит создание EF4 EntityConnection?Я создаю настольное приложение EF4 с помощью SQL Compact, и пользователь сможет открывать файлы базы данных с помощью диалога открытия файла.Затем мой код создает EntityConnection, например:

// Configure a SQL CE connection string  
var sqlCompactConnectionString = string.Format("Data Source={0}", filePath);

// Create an Entity Connection String Builder
var builder = new EntityConnectionStringBuilder();

// Configure Builder
builder.Metadata = string.Format("res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", m_EdmName);
builder.Provider = "System.Data.SqlServerCe.4.0";
builder.ProviderConnectionString = sqlCompactConnectionString;
var edmConnectionString = builder.ToString();

// Create an EDM connection
var edmConnection = new EntityConnection(edmConnectionString);

У меня есть класс ObjectContextFactory, который создает контексты объектов для классов репозитория по мере необходимости.

Итак, вот мой вопрос: лучше ли это практиковатьсоздать EntityConnection один раз, когда я инициализирую фабрику, или фабрика должна создавать новое соединение каждый раз, когда создает контекст объекта?Спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 25 марта 2011

Издержки в EF4, насколько я знаю, минимальны - пожалуйста, проверьте здесь - в основном все сводится к открытию нового соединения с базой данных, и даже эта стоимость невелика, если поставщик поддерживает пул соединений (какой сервер SQLделает).

Метаданные из MetadataWorkspace is кешируются во всем мире, поэтому это не приведет к снижению производительности (что, вероятно, было не так в 2009 году, когда было опубликовано сообщение в блоге, на которое ссылается другой пост).

Кроме того, строки подключения из файла конфигурации (другая проблема с производительностью, указанная в этом сообщении в блоге) все кэшируются в памяти, поэтому я не вижу, как это может негативно повлиять на производительность.

Я бы определенно использовалподключение нового объекта для каждой единицы работы.

1 голос
/ 25 марта 2011

Взгляните на это сообщение в блоге .Кажется, что создание нового EntityConnection для каждого контекста является дорогостоящей операцией и источником некоторых серьезных проблем с производительностью.Корень этих проблем с производительностью (в вашем случае) - это создание метаданных соединения.Другое упоминание в статье о производительности (получение frmo config строки подключения) к вам не относится, поскольку вы предоставляете собственную строку подключения.По моему мнению, вам следует создать единую EntityConnection.

Следует иметь в виду, что согласно документации , EntityConnection не гарантированно безопасен для потоков ,Если вы собираетесь получать доступ к этим соединениям из разных потоков, то у вас возникнут проблемы, и самый безопасный способ решения этой проблемы - , а не повторное использование EntityConnection.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...