2012-11-05 21 views
7

ho aggiunto un campo personalizzato alla tabella UserProfile denominata ClassOfYear e sono in grado di ottenere i dati nel profilo durante la registrazione in questo modo:Aggiorna i campi del profilo utente personalizzato con SimpleMembershipProvider?

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

Tuttavia, ora voglio essere in grado di aggiornare il profilo quando Lo gestisco ma non riesco a trovare un metodo per farlo. Devo semplicemente aggiornare il tavolo UserProfile da solo? In caso contrario, qual è il modo appropriato per farlo?

FYI, sto usando Dapper come livello di accesso ai dati, nel caso in cui sia importante. Ma, come detto, posso semplicemente aggiornare la tabella UserProfile tramite Dapper se è quello che dovrei fare, ho appena pensato che la classe WebSecurity, o qualcosa di simile, avesse già un modo dato che i campi del profilo utente personalizzato sono integrati con Metodo CreateUserAndAccount.

Grazie a tutti!

risposta

4

Non c'è nulla nel codice SimpleMembershipProvider che fa qualcosa con campi aggiuntivi tranne che su create.

Basta interrogare i valori dal proprio ORM.

È possibile utilizzare WebSecurity.GetUserId (User.Identity.Name) per ottenere l'id utente e quindi Dapper per interrogare la tabella UserProfile.

+1

Fantastico, grazie! Il metodo 'WebSecurity.GetUserId' si è appena sbarazzato di un TON di sottospecie che avevo scritto anch'io! Molte grazie! –

+1

Arg. Penso di essermi sbagliato qui, mi sono immerso di più nei dettagli in quanto non documentato. Dopo ulteriori ricerche, penso che ora ci sia un modo per farlo:) Vedere: WebSecurity.CreateUserAndAccount (userName, password, new {CustomPropertyName = WhateverValue}, false); È possibile scaricare questo file sorgente e vederlo richiede un dizionario e analizza ogni valore e inserisce nel database. –

+0

Ma questo non eseguirà un 'AGGIORNAMENTO' giusto? Perché sto usando quel metodo per 'INSERIRE' i valori già (come puoi vedere nella mia domanda in effetti). –

2

Nel caso in cui qualcuno dovesse affrontare lo stesso problema. Dopo aver combattuto molto con SimpleMembership, ho ottenuto una soluzione che popola sia la webpages_Membership che la mia tabella Users personalizzata. Per chiarimenti seguire il mio codice:

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

Dopo maledicendo il quadro un sacco, che mi ha dato una beatitudine di aria fresca :)

PS .: La tabella utenti viene specificato nel file Global.asax utilizzando il Funzione WebSecurity.InitializeDatabaseConnection.

Problemi correlati