Почему для Entity Framework Connection требуется свойство метаданных? - PullRequest
31 голосов
/ 30 января 2009

Я переключил свой 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, не говоря уже о том, что он в итоге получит ОГРОМНОЕ!

Ответы [ 2 ]

27 голосов
/ 30 января 2009

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

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

11 голосов
/ 30 января 2009

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

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 нужны метаданные для построения ваших сопоставлений сущностей.

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

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