2014-12-18 6 views
5

Ho implementato ASP.NET Identity e ha creato automaticamente ASPNETDB.MDF e aspnetdb_log.ldf nella mia cartella App_Data. Ho già le tabelle AspNet (ad esempio AspNetRoles, AspNetUsers, ecc.) Nella mia istanza SQL Express (che è dove sono seduti tutti gli altri miei tavoli). Per quanto posso vedere, la mia applicazione sta leggendo e scrivendo membri e dati di ruolo dal database SQL Express e non da ASPNETDB.MDF.Come posso smettere di utilizzare ASPNETDB.MDF in LocalDB?

ho impostato il mio connectionString nel web.config per:

<add name="DefaultConnection" connectionString="Data Source=MyComputerName\SQLEXPRESS;Initial Catalog=MyDatabaseName;Integrated Security=True" providerName="System.Data.SqlClient" /> 

Tuttavia, se tolgo ASPNETDB.MDF da App_Data, ottengo l'errore seguente quando faccio il login:

Dettagli eccezione: Sistema .Data.SqlClient.SqlException: uno o più file non corrispondono al file primario del database. Se si sta tentando di collegare un database, ritentare l'operazione con i file corretti. Se questo è un database esistente, il file potrebbe essere danneggiato e dovrebbe essere ripristinato da un backup. Impossibile aprire il database predefinito dell'utente. Accesso fallito. Accesso non riuscito per l'utente 'MyComputerName \ MyUserName'. Il file di registro 'C: \ Users \ MyProjectName \ App_Data \ aspnetdb_log.ldf' non corrisponde al file primario. Potrebbe provenire da un altro database o il registro potrebbe essere stato ricostruito in precedenza

L'errore scompare dopo aver aggiunto ASPNETDB.MDF a App_Data.

Ho cercato tutto il codice nella mia soluzione e non fa riferimento a ASPNETDB. Quindi, perché sta ancora cercando di leggerlo?

Sto sviluppando moduli Web ASP.NET su .Net 4.5.

+0

È stata modificata questa stringa di connessione con una valida. Aswartha

+0

La mia stringa di connessione è già connectionString =" Origine dati = MyComputerName \ SQLEXPRESS; Catalogo iniziale = MyDatabaseName; Sicurezza integrata = True " . Non punta a nessun file MDF ma al mio database SQLEXPRESS. – Windhoek

+0

qual è il NOME di questa connessione stringconnectionString = "Origine dati = MyComputerName \ SQLEXPRESS; Initial Catalog = MyDatabaseName; Integrated Security = True" dovrebbe essere uguale a Aswartha

risposta

0

Sembra che avere qualcosa di simile nel web.config

<add name="DefaultConnectionForLocalDb" connectionString="Data Source=(LocalDb)\v11.0;..."; /> 

Nel file AccountModels.cs, si dispone:

public class UsersContext : DbContext 
{ 
    public UsersContext() 
     : base("DefaultConnectionForLocalDb") 
    { 
    } 
} 

Tuttavia dovrebbe essere in questo modo:

<add name="DefaultConnectionForSQLEXPRESS" connectionString="data source=.\SQLEXPRESS;...;" /> 

public class UsersContext : DbContext 
{ 
    public UsersContext() 
     : base("DefaultConnectionForSQLEXPRESS") 
    { 
    } 
} 

Quindi è possibile rimuovere in modo sicuro DefaultConnectionForLocalDb voce dal tuo web.config e ASPNETDB.MDF da a App_Data.

+0

Penso che il mio codice web.config non abbia comparire nel primo post L'ho aggiunto. Fondamentalmente sto già indicando il mio database SQL Server, non il DB locale. Non ho AccountModels.cs. – Windhoek

+0

Dove inizializza l'iscrizione? –

+0

Le mie scuse. Volevo dire che ho implementato l'identità di ASP.Net, non l'appartenenza. Hai ancora bisogno di sapere dove si inizializza l'identità? (Non sono sicuro di dove trovare la risposta, in realtà.) – Windhoek

0

Non so se hai capito questo o no, ma una delle cose che si può provare è: in web.config, connections sezione, aggiungere <Clear/> e poi <Remove Name=LocalSqlServer/>

A quanto pare, se non si modifica/remove the LocalSqlServe tenterà comunque di connettersi ad aspnetdb.mdf.

Si potrebbe anche pensare di aggiungere nuovamente nello LocalSqlServer e fare in modo che punti a SqlExpress o SqlServer.

+0

Sì, ha funzionato. Grazie. – Windhoek

2

Ho avuto lo stesso problema in cui è stato creato automaticamente ASPNETDB.MDF, anche se utilizzo Identità Asp.Net come principale utente.

ho risolto rimuovendo la riga seguente da web.config:

<roleManager enabled="true" /> 

Questo dice ASP.NET per utilizzare la precedente gestione degli utenti di ASP.NET, che non è supportata dall'identità ASP.NET.

0

Stavo ottenendo esattamente lo stesso problema. Ho scoperto che VS tira fastidiosamente nelle impostazioni di configurazione da machine.config, che vive al di fuori del progetto, nel mio caso in ...

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config 

Identity 2.0 aveva usato la seguente stringa di connessione all'interno machine.config ...

<connectionStrings> 
    <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/> 
</connectionStrings> 

per impostare una connessione per ...

 <membership> 
     <providers> 
      <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, ........" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/> 
     </providers> 
    </membership> 

.. (che è stato anche istituito nel machine.config). Se non sono state usando appartenenza allora va bene fare come Signore nick suggerisce (ad eccezione solo il chiaro/farà il lavoro) e semplicemente effettuare le seguenti operazioni in web.config ...

<connectionStrings> 
    <clear/> 
    <add name="DefaultConnection" connectionString="whatever" providerName="System.Data.SqlClient" /> 

Tuttavia, se si, come me, ha avuto in precedenza iscrizione in esecuzione (https://msdn.microsoft.com/en-us/library/6e9y4s5t(v=vs.100).aspx), sarà necessario commento o eliminare le seguenti sezioni dal machine.config ...

<!-- 
    <membership> 
     <providers> 
     ... 
     </providers> 
    </membership> 

    <profile> 
     <providers> 
     ... 
     </providers> 
    </profile> 

    <roleManager> 
     <providers> 
     .. 
     </providers> 
    </roleManager> 
--> 

... dal momento che tutta questa roba non è più necessario per AspNet Identity 2.

ho anche dovuto aggiungere quanto segue in nel mio web.config:

<modules> 
<remove name="RoleManager"/> 
</modules> 

... come da questa risposta: Default Role Provider could not be found on IIS 7 running .NET 4

Spero di aver salvato qualcuno un po 'di tempo. Questo mi ha richiesto ore e ore per allenarmi.