2016-11-09 4 views
0

Ich habe eine asp.net-Website, die mysql für die Mitgliedschaft verwendet. Die Web-App funktioniert gut, wenn ich eine Verbindung zu MySQL unter Windows OS herstelle, aber einen Fehler aufgrund des Tabellennamens (Groß-/Kleinschreibung) unter Linux auslöst.Fehler beim Lesen von ASP.net Mitgliedschaft Tabellen in MySQL

Der Fehler ist nicht relevant für meine Tabellen, aber er bezieht sich auf interne MySQL-Adapterklassen beim Aufruf zur Authentifizierung eines Benutzers. Hier

ist der Fehler:

Table ‚dbname.AspNetUsers‘ existiert nicht

Beschreibung: Eine nicht behandelte Ausnahme während der Ausführung der aktuellen Webanfrage auf. Bitte überprüfen Sie die Stack-Trace für weitere Informationen über den Fehler und wo es aus dem Code stammt.

Ausnahmedetails: MySql.Data.MySqlClient.MySqlException: Table 'dbname.AspNetUsers' nicht

Da existiert, habe ich aspnetusers Tabelle mit Kleinbuchstaben in meiner Datenbank. Der Fehler tritt nur auf, wenn ich den Host von mySQL auf Windows zu Linux ändere.

Hier ist die Codezeile, die die Ausnahme auslöst:

public static ApplicationSignInManager Create(IdentityFactoryOptions<ApplicationSignInManager> options, IOwinContext context) 
     { 
      return new ApplicationSignInManager(context.GetUserManager<ApplicationUserManager>(), context.Authentication); 
     } 

Beachten Sie auch, ich habe keine Mitgliedschaftstabellen in der asp.net Web app da ich die configs für (Mitgliedschaft verwenden, Rollenanbieter), um Benutzer zu verbinden und zu authentifizieren.

Jede Hilfe wird geschätzt.

Antwort

1

fand ich, dass Sie für die Identität und Mitgliedschaft Anbieter in asp.net re-map Tabellennamen können die OnModelCreation Methode in IdentityModels CS- durch zwingende. Hier

ist die Lösung:

protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder) 
      { 
       base.OnModelCreating(modelBuilder); 

       modelBuilder.Entity<ApplicationUser>().ToTable("aspnetusers"); 
       modelBuilder.Entity<IdentityRole>().ToTable("aspnetroles"); 
       modelBuilder.Entity<IdentityUserRole>().ToTable("aspnetuserroles"); 
       modelBuilder.Entity<IdentityUserClaim>().ToTable("aspnetuserclaims"); 
       modelBuilder.Entity<IdentityUserLogin>().ToTable("aspnetuserlogins"); 

} 

Sie feststellen, dass explizit alle Standard asp.net Mitgliedschaft Tabellennamen gesetzt Fall zu senken, wie ich es in meiner Datenbank haben, die das Problem verursacht wurde.

Jetzt kann ich verbinden, authentifizieren und verwalten Mitgliedschaft von meiner bestehenden Web-App, die mit Linux-basierten MySQL DB verbunden ist.

Hoffe, das hilft.