2012-05-23 13 views
8

Ten kod działa poprawnie:Entity Framework web config file

<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> 

ale ten kod nie działa:

<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> 

Drugi kod musi zostać uruchomiony na serwerze zdalnym z instancją MSQSERVER2008 i po załadowaniu strony pojawia się następujący komunikat:

Wystąpił błąd podczas pobierania informacji o usługodawcy z bazy danych. Może to być spowodowane przez Entity Framework za pomocą niepoprawnego ciągu połączenia. Sprawdź wewnętrzne wyjątki, aby poznać szczegóły i upewnij się, że ciąg połączenia jest poprawny.

+0

Czy sprawdziłeś wewnętrzny wyjątek zgodnie z sugestią otrzymanego komunikatu o błędzie? –

+0

Czy sprawdziłeś wewnętrzne wyjątki w celu uzyskania szczegółów? – granaker

Odpowiedz

11

Problem dotyczy parametru Zintegrowane zabezpieczenia. Gdy jest ustawiony na True, .Net próbuje otworzyć połączenie z bieżącym zdarzeniem użytkownika, jeśli podasz użytkownika i hasło. Aby otworzyć połączenie z określonym użytkownikiem, ustaw Zintegrowane zabezpieczenia na fałsz i będzie działać.

<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

Oto, co musiałem zrobić, aby EF połączyć za pomocą dynamicznych ustawień ciąg połączenia, chociaż moje ustawienia są wprowadzane przez użytkownika, nie web config:

 // 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. Dlaczego upadek? Moje rozwiązanie działa i łatwo rozwiązuje problem. Miałem ten sam problem co OP i rozwiązałem go, dynamicznie przypisując wymagane wartości. Rozwiązanie web config byłoby trywialne stąd, po prostu za pomocą ConfigurationManager.AppSettings. – Taersious

0

upewnij się, że w związku kodu ciąg jest poprawne:

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

sprawdź serwer sql.