инициализация объектного контекста структуры сущности при каждом вызове - PullRequest
7 голосов
/ 10 мая 2011

У меня есть веб-приложение, которое использует Entity Framework в качестве слоя доступа к данным.Теперь я инициализирую класс сущности, который наследуется от ObjectContext при каждом запросе.

Я просто хочу знать, есть ли какие-либо недостатки или последствия с точки зрения производительности при выполнении этого.Лучше кэшировать этот объект.

Обратите внимание, что у меня есть большие файлы EDMX, некоторые из них содержат около 50 таблиц

Ответы [ 3 ]

4 голосов
/ 10 мая 2011

Инициализация ObjectContext для запроса является, вероятно, наиболее распространенным способом реализации EF в веб-приложении. Это не проблема производительности, инициализация довольно дешевая. ObjectContext - это реализация EF шаблона Unit of Work, поэтому рекомендуется инкапсулировать разговоры с базой данных в одну единицу работы. Кэширование ObjectContext между запросами может быть проблематичным, поскольку длительные сеансы связи с базой данных нелегко обрабатываются в веб-приложениях, поскольку вы никогда не знаете, когда поступит следующий запрос от данного клиента.

2 голосов
/ 10 мая 2011

Использование нового экземпляра контекста для каждого запроса или действия является обязательным . Это не влияет на производительность, поскольку метаданные (из EDMX) загружаются и компилируются только один раз (когда они вам нужны впервые), и после этого метаданные повторно используются для всех экземпляров одного и того же контекста, пока пул приложений не будет перезагружен. Вы даже можете ускорить инициализацию, предварительно скомпилировав метаданные .

2 голосов
/ 10 мая 2011

Это рекомендуемая практика при работе с Entity Framework в веб-приложениях.

Однако вы можете разделить ваш контекст, содержащий 50 таблиц, на пару контекстов, если вы можете разделить ваши таблицы на независимые области. Тогда вам будет намного легче управлять контекстами.

Кэширование контекста не рекомендуется. ObjectContext не является потокобезопасным. ЭТО также нарушит схему работы. Это приведет к нежелательному поведению, такому как передача изменений нескольких пользователей в одной транзакции.

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