2012-05-23 3 views
8

Этот код работает отлично:Entity Framework веб-конфигурационный файл

<connectionStrings> 
    <add name="EFDbContext" connectionString="Data Source=.\SQLEXPRESS; Initial Catalog=myDB;Integrated Security=SSPI; 
" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True" /> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 

но этот код не работает:

<connectionStrings> 
    <add name="EFDbContext" connectionString="Data Source=.\MSSQLSERVER2008; Initial Catalog=myDb;Integrated Security=SSPI;User ID=useradmin; Password=pass; " providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="Data Source=.\MSSQLSERVER2008; Integrated Security=True; MultipleActiveResultSets=True" /> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 

Второй код должен быть запущен на удаленном сервере с MSQSERVER2008 экземпляра и при загрузке страницы появляется следующее сообщение:

Произошла ошибка при получении информации о поставщике из базы данных. Это может быть вызвано Entity Framework с использованием неправильной строки подключения. Проверьте внутренние исключения и проверьте правильность строки подключения.

+0

Вы проверили внутреннее исключение, как указано в полученном вами сообщении об ошибке? –

+0

Вы проверили внутренние исключения для деталей? – granaker

ответ

11

Проблема заключается в параметре Integrated Security. Если для него установлено значение Истина, .Net попытайтесь открыть соединение с текущим пользовательским событием, если вы укажете пользователя и пароль. Таким образом, чтобы открыть соединение с конкретным пользователем, установите Integrated Security в False, и он будет работать.

<connectionStrings> 
    <add name="EFDbContext" connectionString="Data Source=.\MSSQLSERVER2008; Initial Catalog=myDb;Integrated Security=SSPI;User ID=useradmin; Password=pass; " providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="Data Source=.\MSSQLSERVER2008; Integrated Security=False; MultipleActiveResultSets=True" /> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 
1

Вот что я должен был сделать, чтобы EF подключиться с помощью динамических параметров строки соединения, хотя мои настройки пользовательского ввода, а не веб-конфигурации:

 // Set the properties for the data source. 
     sqlBuilder.ConnectionString = "Integrated Security=SSPI;"; 
     sqlBuilder.DataSource = serverName; 
     sqlBuilder.InitialCatalog = databaseName; 
     sqlBuilder.ConnectTimeout = 60; 
     sqlBuilder.MultipleActiveResultSets = true; 
     if(!string.IsNullOrEmpty(userName) || !string.IsNullOrEmpty(password)) 
     { 
      sqlBuilder.UserID = userName; 
      sqlBuilder.Password = password; 
      //sqlBuilder.IntegratedSecurity = false; 
     } 
     else 
     { 
      sqlBuilder.IntegratedSecurity = true; 
     } 
+0

Ugh. Почему нисходящий? Мое решение работает и легко решает проблему. У меня была та же проблема, что и у OP, и решил ее, динамически присваивая требуемые значения. Решение для веб-конфигурации было бы тривиально отсюда, просто используя ConfigurationManager.AppSettings. – Taersious

0

убедитесь, что в вашей связи кода строка исправьте:

"Data Source=.\MSSQLSERVER2008; Initial Catalog=myDb;Integrated Security=SSPI;User ID=useradmin; Password=pass;" 

проверить ваш сервер sql.