Entity Framework Имя схемы изменения для каждого соединения - PullRequest
2 голосов
/ 14 февраля 2012

Я занимаюсь разработкой приложения, которое будет разделять данные клиента на разные схемы в MS SQL Server 2008. Структура таблицы одинакова для каждой схемы.Entity Framework 4.1 будет использоваться для доступа к данным, используя разные строки подключения для каждого клиента.Пользователь в строке подключения настроен на использование определенной схемы в базе данных, и это не проблема.

Проблема, с которой я сталкиваюсь, заключается в том, что имя схемы в запросах жестко закодировано в EDMX.если я удаляю имя схемы из каждого объекта в .edmx, тогда .NET вместо этого использует имя EntityContainer.Как можно изменить это имя схемы для каждого соединения?Я использую универсальный DbContext для создания моих соединений со строкой соединения, предоставляемой для запроса.

Я пробовал Брэндона Хейнса EF ModelAdapter на codeplex, но, похоже, это не работает противпоследняя версия EF.Любая помощь приветствуется!

1 Ответ

2 голосов
/ 15 февраля 2012

Решить это с помощью EDMX + DbContext, вероятно, будет сложно, потому что единственный способ - создать отдельный SSDL для каждой схемы.SSDL является частью вашего файла EDMX и является частью, где определены все таблицы, включая имя их схемы.Вы можете изменить SSDL во время выполнения (это просто XML по умолчанию, сохраняемый как ресурс вашей сборки), но вам придется вручную создать MetadataWorkspace для каждой схемы, использовать его для создания EntityConnection и передачи соединения в конструктор контекста.

EF ModelAdapter основан на ObjectContext, поэтому вам придется использовать API ObjectContext (.NET 4.0) вместо API DbContext, если вы хотите его использовать.

Если вы переходите к отображению кода (нетEDMX, но свободный API, используемый для описания сопоставления), будет возможно достичь этого, потому что вы сможете параметризовать свой единственный набор сопоставления и использовать несколько DbModel экземпляров (по одному на схему).

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