#.net #entity-framework #ado.net
#.net #entity-framework #ado.net
Вопрос:
Я хочу использовать Ado.Net Entity Framework в приложении. Но приложение должно иметь возможность подключаться к разным базам данных (хотя и с точно такой же структурой) во время выполнения. Кроме того, это клиентское приложение, оно выполняется локально.
Я не нашел способа сделать это. Есть несколько вопросов, касающихся доступа к различным базам данных, но ответы, похоже, сводятся к изменению некоторых конфигурационных файлов, чего я не могу сделать при развертывании приложения.
Заранее спасибо.
Ответ №1:
Вы должны использовать разные строки подключения (вы можете передать строку подключения конструктору контекста). Вы должны каким-то образом определить эти строки подключения, и наиболее распространенным способом является использование файла конфигурации. Если вы не хотите использовать файлы конфигурации, пользователю придется указать параметры файла подключения во время выполнения, и вам придется создать правильные строки подключения.
Для этого сценария существуют некоторые ограничения. Базы данных должны быть:
- Точно такой же. Любое единственное различие в отображенной таблице или отображенном столбце может привести к сбою в работе приложения.
- Запуск на сервере базы данных того же типа. Если вы используете файл EDMX, описание базы данных, хранящееся в метаданных, зависит от сервера базы данных. В случае SQL server версия (2005 или 2008) также имеет значение!
Комментарии:
1. Спасибо за ответ. Подсказка, касающаяся зависимости от версии SQL server, очень важна и вполне может помочь нам в использовании платформы вообще. Единственное решение, которое я могу придумать, — это создать две модели (одну для 2005, другую для 2008) и использовать их в зависимости от рассматриваемой версии SQL server, что добавило бы много абстракции, если это вообще возможно.
2. EDMX состоит из трех частей — SSDL, MSL и CSDL. Вы можете повторно использовать MSL и CSDL и определить только два разных SSDL с указанием правильного поставщика. Тогда вам нужно будет только ссылаться на правильные файлы (обычно хранящиеся как ресурс) из строки подключения к entity.