2009-08-04 11 views
20

Ich habe eine asp.net-Website, die den ASP.net-Mitgliedschaftsanbieter verwendet. Jeder Kommentar, Eintrag usw. in der DB wird von der Benutzer-ID verfolgt.ASP.NET Benutzernamen ändern

Da MS keine Möglichkeit bietet, den Benutzernamen zu ändern, habe ich den userNAME in der Tabelle "users" in der DB gefunden und es gibt nur einen Ort, wo der Benutzername erscheint.

Meine Frage ist,

Ist es sicher, ein „Profil bearbeiten“ Seite zur Verfügung zu stellen, wo der Benutzer berechtigt ist, ihre eigenen Benutzernamen zu bearbeiten. Natürlich würde ich diese Änderung im Hintergrund behandeln, indem ich den "username" -Wert im DB direkt ändere.

Gibt es irgendwelche Nachteile? Ich habe einige Test-Accounts erstellt und modifiziert und es scheint in Ordnung zu sein, ich frage mich nur, ob es irgendwelche bekannten Nachteile gibt, bevor ich es in Produktion bringe.

+0

Wir sollten überprüfen, Faust, wenn Fremdschlüssel existieren durch http://StackOverflow.com/A/1374315/413032. Wenn nicht, sollten wir fragen (: Wenn jemand es benutzt und es keinen Schlüssel gibt. Dann können wir den Benutzer updaten und sehen, was sein wird. –

Antwort

14

cptScarlet Link war gut, aber ich verachte mit gespeicherten Prozeduren, wenn ich nicht muss und ich favorisiere Entity Framework wann immer möglich. Hier ist, was ich tat, um den Benutzernamen zu ändern, mit EF 4.0 und .NET 4.0:

  1. Rechts klicken Projekt -> Add Item Neu -> ADO.NET Entity Data Model
  2. Geben Sie ihm einen richtigen Namen, ich In wählte „MembershipModel.edmx“ und klicken sie
  3. Wählen sie aus Datenbank generieren und klicken sie auf Weiter
  4. Fügen sie die Verbindung zu Ihrem ‚aspnetdb‘ Datenbank (die ASP.NET-Mitgliedschaft Datenbank)
  5. es einen richtigen Namen geben, wählte ich "MembershipEntities"
  6. Klicken Sie auf Weiter
  7. Drill in den Tabellen und wählen Sie aspnet_Users
  8. das Modell Namespace Änderungs
  9. MembershipModel Klicken Sie auf Fertig

Jetzt können Sie Code hinzufügen, das EF Objektkontext zu erstellen und die Datenbank ändern:

public void ChangeUserName(string currentUserName, string newUserName) 
{ 
    using (var context = new MembershipEntities()) 
    { 
     // Get the membership record from the database 
     var currentUserNameLowered = currentUserName.ToLower(); 
     var membershipUser = context.aspnet_Users 
      .Where(u => u.LoweredUserName == currentUserNameLowered) 
      .FirstOrDefault(); 

     if (membershipUser != null) 
     { 
      // Ensure that the new user name is not already being used 
      string newUserNameLowered = newUserName.ToLower(); 
      if (!context.aspnet_Users.Any(u => u.LoweredUserName == newUserNameLowered)) 
      { 
       membershipUser.UserName = newUserName; 
       membershipUser.LoweredUserName = newUserNameLowered; 
       context.SaveChanges(); 
      } 
     } 
    } 
} 

Hinweis: Ich habe in meinem Code keine Anwendungs-IDs angegeben. Normalerweise verwende ich nur eine Anwendung, die die ASP.NET-Mitgliedschaftsdatenbank verwendet. Wenn Sie also mehrere Apps haben, müssen Sie dies berücksichtigen.

Verwandte Themen