Почему для Entity Framework Connection требуется свойство метаданных?

connection connection-string data-access-layer database entity-framework

Вопрос

Я переключил свой DAL с использования LINQ на Entity Framework. Поскольку мое приложение подключается к различным базам данных в зависимости от текущего пользователя, мне нужно динамически создавать DataContext во время выполнения и передавать соответствующую строку подключения. Однако, когда я попытался программно создать соединение Entity Framework, используя мою старую строку соединения, соединение не удалось. Он пожаловался, что не распознал ключ в строке подключения, а точнее «сервер».

Я обнаружил, что мне нужно сделать это, чтобы заставить работать соединение Entity Framework:

EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = "System.Data.SqlClient";
entityBuilder.ProviderConnectionString = clientConnectionString;
entityBuilder.Metadata = "res://*/xxxxxxxxxx.csdl...";
Entities entities = new Entities(entityBuilder.ToString());

Почему это?
Для чего нужна метаданные?
Будет ли проблемой то, что она всегда одинакова для нескольких разных соединений?
Что это должно быть?
Есть ли способ обойти это?

Заранее спасибо!

Обновление 1: спасибо за обновление Randolpho, но ...
Причина, по которой у меня возникла эта проблема, заключается в том, что я не могу сохранить строки подключения в файле конфигурации. Строка подключения определяется динамически во время выполнения, к которому подключается пользователь.

Вот мой точный сценарий:
Если пользователь A подключается, приложение извлекает данные из базы данных A. Если пользователь B подключается, приложение извлекает данные из базы данных B.
Строки подключения хранятся в основной базе данных, и их количество потенциально не ограничено. Каждый раз, когда я добавляю пользователя, я не хочу заходить в web.config, не говоря уже о том, что он в конечном итоге получит ОГРОМНОЕ!

Принятый ответ

Вы найдете эти ссылки очень информативными:

http://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnection.connectionstring.aspx

http://weblogs.asp.net/pgielens/archive/2006/08/21/ADO.NET-Entity-Framework-Metadata.aspx

Нижняя линия? Entity Framework нужны метаданные для построения ваших сопоставлений сущностей.

Кроме того, вам следует рассмотреть возможность перемещения информации о соединении в файл конфигурации, а не встраивать ее в код. Первая ссылка покажет вам, как это сделать.


Популярные ответы

Расширяя ответ Рэндольфо:

Свойство метаданных, в частности, указывает на расположение файлов .SSDL (модель хранения), .CSDL (концептуальная модель) и .MSL (модель отображения). Эти три файла по сути являются моделью данных сущностей. Квалификатор в стиле URI "res: //" указывает, что файлы встроены как ресурсы в скомпилированную сборку EDM.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему