2012-02-14 3 views
2

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

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

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

ответ

2

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

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

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

Смежные вопросы