public class FoobarContext : IdentityDbContext<ApplicationUser>, IFoobarContext
{
public FoobarContext() : base("connectionStringNameFoobar") {...}
...
}
Questo è il mio DbContext che sto usando nella mia soluzione. Ho un'applicazione web, che ad un certo punto accede al contesto e può connettersi e accedere correttamente al mio database.
Ora ho anche aggiunto un'applicazione per console alla mia soluzione. Usa lo stesso codice. Prova a inizializzare lo stesso contesto. Ma quando eseguo la mia applicazione console, ottengo l'eccezione che l'utente non può accedere perché la password fornita è sbagliata.
Ecco anche il log del server SQL "Accesso fallito per l'utente 'FooBarUser'. Motivo: La password non corrisponde a quella per l'accesso fornito. [CLIENT: local machine]"
Ecco la mia stringa di connessione:
<connectionStrings>
<add name="connectionStringNameFoobar" connectionString="data source=localhost;initial catalog=MyFoobarDB;User Id=FooBarUser;Password=FooBar123;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>
Quando inserisco direttamente la stringa di connessione, non funziona neanche. per esempio:
public FoobarContext() : base("data source=localhost;initial catalog=MyFoobarDB;User Id=FooBarUser;Password=FooBar123;MultipleActiveResultSets=True;App=EntityFramework") {...}
La cosa strana è che quando utilizzo un overload per IdentityDbContext e passa un SqlConnection esistente, funziona. per esempio:
public FoobarContext () : base(new SqlConnection(ConfigurationManager.ConnectionStrings["connectionStringNameFoobar"].ConnectionString), true)
Nota che ho anche provato a passare la stringa di connessione tramite il Configuration Manager come visto sopra e non usando il sovraccarico, dove passo un SqlConnection ma che ha provocato lo stesso errore di login.
Inoltre:
La mia installazione:
In ogni caso (app web e console) il FoobarContext viene istanziato tramite Autofac.
Quindi questo pone la domanda: perché?
EDIT: passare direttamente la stringa di connessione anche NON funziona. Colpa mia
Includere "Persist Security Info = true" nella mia stringa di connessione ha risolto il problema.
Per ulteriori informazioni, consultare: https://stackoverflow.com/a/30420514/3827069
Sebbene abbia letto che non è consigliabile impostarlo su true. Quindi una soluzione migliore è sempre benvenuta