2014-12-18 5 views
5

Ich habe ASP.NET Identity implementiert und es automatisch ASPNETDB.MDF und aspnetdb_log.ldf in meinem App_Data-Ordner erstellt. Ich habe bereits die AspNet-Tabellen (d. H. AspNetRoles, AspNetUsers usw.) in meiner SQL Express-Instanz (wo alle meine anderen Tabellen sitzen). Soweit ich sehen kann, liest und schreibt meine Anwendung Mitgliedschafts- und Rollendaten aus der SQL Express-Datenbank und nicht aus ASPNETDB.MDF.Wie kann ich ASPNETDB.MDF in LocalDB beenden?

ich meine Connection in web.config gesetzt haben:

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

Wenn ich jedoch ASPNETDB.MDF von App_Data entfernen, ich die folgende Fehlermeldung erhalten, wenn ich einloggen:

Ausnahmedetails: System .Data.SqlClient.SqlException: Eine oder mehrere Dateien stimmen nicht mit der primären Datei der Datenbank überein. Wenn Sie versuchen, eine Datenbank anzuhängen, wiederholen Sie die Operation mit den richtigen Dateien. Wenn es sich um eine vorhandene Datenbank handelt, ist die Datei möglicherweise beschädigt und sollte aus einer Sicherung wiederhergestellt werden. Benutzer-Standarddatenbank kann nicht geöffnet werden. Anmeldung fehlgeschlagen. Anmeldung fehlgeschlagen für Benutzer 'MyComputerName \ MyUserName'. Die Protokolldatei 'C: \ Users \ MyProjectName \ App_Data \ aspnetdb_log.ldf' stimmt nicht mit der primären Datei überein. Es kann aus einer anderen Datenbank stammen oder das Protokoll wurde möglicherweise zuvor neu erstellt

Der Fehler verschwindet, sobald ich ASPNETDB.MDF zurück zu App_Data hinzufügen.

Ich habe den gesamten Code in meiner Lösung gesucht und es gibt keinen Verweis auf ASPNETDB. Warum versucht es immer noch davon zu lesen?

Ich entwickle ASP.NET Web Forms auf .Net 4.5.

+0

Bearbeiten Sie diese Verbindungszeichenfolge mit einer gültigen. Aswartha

+0

Meine Verbindungszeichenfolge ist bereits connectionString =" Datenquelle = MyComputerName \ SQLEXPRESS; Initial Catalog = MyDatabaseName; Integrated Security = True " . Es zeigt nicht auf eine MDF-Datei, sondern auf meine SQLEXPRESS-Datenbank. – Windhoek

+0

Was ist der NAME dieser Verbindung? StringconnectionString = "Datenquelle = MeinComputerName \ SQLEXPRESS; Erster Katalog = MeinDatenbankname; Integrierte Sicherheit = True" sollte identisch sein mit Aswartha

Antwort

0

Es Sie haben wie

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

In Ihrem AccountModels.cs Datei in Ihrem web.config etwas scheint, Sie haben:

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

aber es so sein sollte:

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

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

Dann können Sie sicher DefaultConnectionForLocalDb Eintrag von Ihrementfernen 210 und ASPNETDB.MDF von bis App_Data.

+0

Ich denke, dass mein web.config Code didn werde nicht im ersten Beitrag angezeigt. Ich habe es hinzugefügt. Grundsätzlich zeige ich bereits die meine SQL Server-Datenbank, nicht die lokale Datenbank. Ich habe kein AccountModels.cs. – Windhoek

+0

Wo wird die Mitgliedschaft initialisiert? –

+0

Entschuldigung. Ich wollte sagen, dass ich ASP.Net Identity implementiert habe, nicht Mitgliedschaft. Müssen Sie noch wissen, wo Identity initialisiert wird? (Ich bin mir nicht sicher, wo ich diese Antwort finden könnte.) – Windhoek

0

Ich weiß nicht, ob Sie dies herausgefunden haben oder nicht, aber eines der Dinge, die Sie versuchen können, ist: in web.config, connections Abschnitt, <Clear/> hinzufügen und dann <Remove Name=LocalSqlServer/>

Anscheinend, wenn Sie nicht ändern tun/Entfernen Sie die LocalSqlServe wird immer noch versuchen, eine Verbindung mit der aspnetdb.mdf herzustellen.

Sie könnten auch darüber nachdenken, in der LocalSqlServer und zeigen Sie es auf Ihre SqlExpress oder SqlServer.

+0

Ja, das hat funktioniert. Vielen Dank. – Windhoek

2

Ich hatte das gleiche Problem, wo die ASPNETDB.MDF automatisch erstellt wurde, auch wenn ich Asp.Net Identity als Hauptbenutzerverwaltung verwenden.

Ich löste es durch die folgende Zeile aus web.config entfernen:

<roleManager enabled="true" /> 

Dieser erzählt ASP.NET, um die ältere Benutzerverwaltung der ASP.NET-Mitgliedschaft zu verwenden, die von ASP.NET Identity nicht unterstützt wird.

0

Ich bekam genau das gleiche Problem. Ich entdeckte, dass VS zieht annoyingly in Konfigurationseinstellungen von machine.config, die außerhalb des Projekts lebt, in meinem Fall in ...

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

Identity 2.0 die folgende Verbindungszeichenfolge innerhalb machine.config verwendet hatte ...

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

eine Verbindung für einzurichten ...

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

.. (die auch in machine.config gesetzt wurde). Wenn nicht Mitgliedschaft wurde mit dann ist es in Ordnung, Herr Nick schlägt vor, zu tun (außer nur die klare/die Arbeit machen) und einfach gehen Sie wie folgt in web.config ...

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

Allerdings, wenn Sie, wie ich, hatte zuvor Mitgliedschaft (https://msdn.microsoft.com/en-us/library/6e9y4s5t(v=vs.100).aspx) ausgeführt wird, müssen Sie die folgenden Abschnitte von machine.config kommentieren oder löschen ...

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

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

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

... da all dieses Zeug nicht ist länger benötigt für AspNet Identity 2.

Ich hatte auch die folgenden in meinem web.config hinzufügen:

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

... nach dieser Antwort: Default Role Provider could not be found on IIS 7 running .NET 4

ich mich jemand habe gerettet einige Zeit hoffen. Das hat mich Stunden und Stunden gekostet.