Почему для Entity Framework Connection требуется свойство метаданных?
Я переключил свой 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, не говоря уже о том, что он в конечном итоге станет ОГРОМНЫМ!
Ответы
Ответ 1
Вы найдете эти ссылки очень информативными:
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 нуждается в метаданных для построения сопоставлений сущностей.
Кроме того, вам следует переместить информацию о подключении в файл конфигурации, а не создавать ее в коде. Первая ссылка покажет вам, как это сделать.
Ответ 2
Развернувшись на ответ Рэндолфо:
Свойство метаданных конкретно указывает на расположение файлов .SSDL(Model Model,).CSDL(Концептуальная модель) и .MSL(Mapping Model). Эти три файла по существу представляют собой модель данных сущности. Обозначение "res://" в стиле URI указывает, что файлы встроены в ресурсы в сборную сборку EDM.