Я исследую EF4 для нового собственного проекта разработки приложений с использованием .NET v4, EF4 и SQL Server 2008 R2. На сегодняшний день наша небольшая команда разработчиков практически не занималась разработкой .NET и только демонстрировала EF-приложения. Наши текущие приложения используют роли приложений БД для безопасности, и это хорошо сработало для нас.
Из прочтения и некоторых базовых экспериментов я понимаю:
EF может открывать и закрывать соединения с БД по мере необходимости. Однако можно вручную открыть и закрыть EntityConnection для использования EF ObjectContext.
Безопасность роли приложения SQL Server требует запуска sp_setapprole для соединений с БД, чтобы установить контекст роли приложения. Процедура sp_unsetapprole может использоваться для возврата соединения в исходный контекст.
По умолчанию соединения с БД объединяются. Использование sp_setapprole с пулом соединений может быть проблематичным, если соединения не восстанавливаются в их исходном контексте до их возвращения в пул.
Если все вышеперечисленное верно, то очевидный способ использования EF4 с ролями приложений - вручную открыть и закрыть EntityConnection, обязательно выполнив sp_setapprole после открытия и sp_unsetapprole перед закрытием.
Есть ли лучший способ? Меня больше всего беспокоит случайное закрытие соединения без предварительного вызова sp_unsetapprole. Похоже на ошибку, которая не может быть замечена сразу.