Как работать со строками динамического соединения во время выполнения для EF 4.1? - PullRequest
3 голосов
/ 03 августа 2011

Я не могу использовать конфигурационные файлы, я должен инициализировать соединение с базой данных во время выполнения.Это база данных SQL Server 2008.

Поскольку я обновил EF до более новой версии ADO.NET Entity Framework 4.1 - обновление 1, Database.Connection.ConnectionString больше не работает для меня.Строка подключения в файле конфигурации работает нормально, но мне нужно определить ее динамически.Поэтому я нашел другой популярный способ сделать это с помощью DefaultConnectionFactory, например так:

Database.DefaultConnectionFactory = 
    new SqlConnectionFactory("Server=local;Initial Catalog=Db1;Trusted_Connection=True;")

Однако в случае, если я получил сообщение об ошибке при попытке доступа к любому производному объекту DbSet: Поставщик не возвратил ProviderManifestTokenстрока.---> System.Data.SqlClient.SqlException: произошла ошибка, связанная с сетью или экземпляром, при установлении соединения с SQL Server.Сервер не найден или не был доступен.Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений.(поставщик: поставщик именованных каналов, ошибка: 40 - не удалось открыть соединение с SQL Server)

ОБНОВЛЕНИЕ: проблема возникает только в том случае, если база данных еще не создана и должна быть восстановленаEF.Если оно существует, такого исключения не возникает, поскольку я запрашиваю данные в БД.Если я определяю одну и ту же строку подключения в конфигурационных файлах, у меня все в порядке (генерация базы данных и запрос данных)

Что я делаю не так?Спасибо

Ответы [ 2 ]

3 голосов
/ 03 августа 2011

Вы можете использовать класс EntityConnectionStringBuilder для построения строки соединения для контекста,

EntityConnectionStringBuilder entityBuilder =new EntityConnectionStringBuilder();
entityBuilder.Provider = "provider";
entityBuilder.ProviderConnectionString = "connectionString";

и передать при создании dbContext

 YourContext(entityBuilder.ToString())
0 голосов
/ 03 августа 2011

Вы по-прежнему можете использовать файл конфигурации, конфигурация которого начинается со значения по умолчанию, и вы можете изменить значение во время выполнения, в частности это то, для чего они предназначены, и его можно установить для всего приложения или для каждой области пользователя.Итак, начните с пустого параметра конфигурации, соберите вашу строку во время выполнения и установите ее в конфигурационный файл и прочитайте из нее ваше приложение. Я делаю это довольно часто.это завтра, когда я доберусь до работы

...