2012-11-05 33 views
7

Ich habe ein benutzerdefiniertes Feld auf die Tabelle mit dem Namen UserProfileClassOfYear und ich bin in der Lage, die Daten in das Profil bei der Anmeldung wie folgt zu erhalten:Benutzerdefinierte Benutzerprofilfelder mit SimpleMembershipProvider aktualisieren?

var confirmationToken = WebSecurity.CreateUserAndAccount(model.UserName, 
    model.Password, 
    propertyValues: new { ClassOfYear = model.ClassOfYear }, 
    requireConfirmationToken: true); 

jedoch jetzt dem Profil aktualisieren zu können, ich will, wenn Ich schaffe es, aber ich kann keine Methode finden, dies zu tun. Muss ich einfach die UserProfile Tabelle selbst aktualisieren? Wenn nicht, was ist der geeignete Weg, dies zu tun?

FYI, ich benutze Dapper als meine Datenzugriffsschicht, nur für den Fall, dass es darauf ankommt. Aber, wie gesagt, ich kann nur die UserProfile Tabelle über Dapper aktualisieren, wenn das ist, was ich tun soll, ich dachte nur, dass die WebSecurity Klasse, oder etwas Ähnliches, hatte bereits einen Weg, da die benutzerdefinierten Benutzerprofilfelder integriert sind CreateUserAndAccount Methode.

Vielen Dank!

Antwort

4

Es gibt nichts im SimpleMembershipProvider-Code, der irgendetwas mit zusätzlichen Feldern außer create tut.

Fragen Sie einfach die Werte von Ihrem ORM ab.

Sie können die WebSecurity.GetUserId (User.Identity.Name) verwenden, um die Benutzer-ID und dann Dapper zum Abfragen der UserProfile-Tabelle abzurufen.

+1

Super, danke! Die 'WebSecurity.GetUserId' Methode hat gerade eine TON von Sub-Abfragen losgeschickt, die ich auch geschrieben hatte! Danke vielmals! –

+1

Arg. Ich glaube, ich lag hier falsch, tauchte mehr in die Details, da es meist undokumentiert ist. Nach mehr Forschung denke ich, es gibt eine Möglichkeit, dies jetzt zu tun:) Siehe: WebSecurity.CreateUserAndAccount (Benutzername, Passwort, neue {CustomPropertyName = WasWertWert}, false); Sie können diese Quelldatei herunterladen und sehen, dass es ein Wörterbuch nimmt und jeden Wert analysiert und in die Datenbank einfügt. –

+0

Aber das wird kein 'UPDATE' richtig machen? Weil ich diese Methode verwende, um die Werte bereits 'INSERT' zu setzen (wie Sie in meiner Frage in der Tat sehen können). –

2

Nur für den Fall, dass jemand mit dem gleichen Problem konfrontiert. Nachdem ich viel mit SimpleMembership gekämpft habe, habe ich eine Lösung gefunden, die sowohl die webpages_Membership als auch meine benutzerdefinierte Users-Tabelle füllt. Zur Verdeutlichung meinen Code folgen:

public ActionResult Register(RegisterModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      TUsuario userDTO= new TUSer() 
       { 
        Name = model.Name, 
        Login = model.Login, 
        Pass = model.Pass.ToString(CultureInfo.InvariantCulture), 
        Active = true, 
        IdCompany = model.IdCompany, 
        IdUserGroup = model.IdUserGroup, 
       }; 
      try 
      { 
       WebSecurity.CreateUserAndAccount(model.Login, model.Pass, new { IdUser = new UserDAL().Seq.NextVal(), Name = userDTO.Name, Login = userDTO.Login, Active = userDTO.Active, Pass = userDTO.Pass, IdCompany = userDTO.IdCompany, IdUserGroup = userDTO.IdUserGroup }); 

       WebSecurity.Login(model.Login, model.Pass); 

Nach den Rahmen viel Fluchen, gab die mir eine Wonne frischer Luft :)

PS .: Die Benutzer-Tabelle in der global.asax-Datei angegeben wird, mit der WebSecurity.InitializeDatabaseConnection-Funktion.

Verwandte Themen