2010-11-09 16 views
5

Ho eseguito MVC in passato, ma sono nuovo in ASP e ASP MVC. Mi piace molto la facilità che ASP MVC mi fornisce, finora, ma ho difficoltà a capire come ottenere un maggiore controllo sugli utenti. Per impostazione predefinita, MVC fornisce un modulo di registrazione utente minimo. Ho guardato in giro un bel po ', ma ho ancora due domande:Profili utente ASP MVC

  1. come faccio a rendere la base di dati degli utenti un database locale nel mio progetto? Penso che SQLEXPRESS sia usato per memorizzare i valori dell'utente, in quello che sembra un processo magico. Come posso de-magic-ify questo? Mi piacerebbe avere più controllo sulla posizione di questo database.

  2. Questo porta a un'altra domanda: Come faccio ad espandere l'utente? Ho letto su Profili, ma sono ancora confuso su alcune cose. Come posso preparare un profilo e collegarlo a un utente? Cosa serve come chiave straniera? E, nei miei controllori, come posso accedere a varie parti dell'utente come username, email o anche dal profilo come nome, cognome (anche se immagino che una volta quando ho un database di Profile e un database di User in locale, posso eseguire comandi SQL per recuperare i dati)

vorrei davvero apprezzare alcune indicazioni per le giuste risorse, e/o di migliori pratiche con ASP.NET

risposta

3

vorrei iniziare da qui:

anche una grande serie di articoli (18 articoli !!!) da Scott Mitchell al 4GuysFromRolla.

Il modello di appartenenza ASP.NET è progettato per avere un'architettura collegabile. Puoi scrivere la tua implementazione MembershipProvider più adatta alle tue esigenze.

Anche se la maggior parte degli esempi che si trovano in rete riguardano i moduli Web ASP.NET, quando si utilizzano MVC ci sono differenze minime.

8

Vorrei iniziare leggendo questo Microsoft article ufficiale sull'estensione dell'API Membership ASP.NET. Parla della creazione di tabelle aggiuntive per l'archiviazione di informazioni aggiuntive sugli utenti.

Il database di appartenenza

  1. Se si dispone di un database esistente che contiene tutte le vostre altre informazioni sito web, è possibile eseguire lo strumento aspnet_regsql.exe per generare le tabelle utente necessarie. Dovrai quindi modificare il tuo web.config e aggiungere SqlMembershipProvider insieme alla stringa di connessione.
  2. Se si sta creando un nuovo progetto e non si dispone di un database, iniziare con un nuovo progetto MVC che ha già attivato Membership. Il database verrà creato all'interno della cartella App_Data al primo utilizzo e sarà possibile prenderlo e collegarlo al server SQL/SQLEXPRESS. Quindi è solo questione di cambiare la stringa di connessione per utilizzare un server DB piuttosto che un file locale.

Creazione di tabelle aggiuntive

Questa parte è in realtà abbastanza semplice e consiste di alcuni brevi passaggi:

  1. creare una nuova tabella, cioè UserProfiles
  2. Aggiungere una colonna uniqueidentifier come la tua chiave primaria e aggiungi una chiave esterna alla tabella aspnet_Users
  3. Aggiungi eventuali altri campi che desideri archiviare (Telefono, Indirizzo, genere, ecc.)
  4. Se si utilizza LINQ-to-SQL o Entity Framework, è possibile trascinare semplicemente le tabelle necessarie sul designer e si sarà pronti per eseguire una query delle tabelle Membership.

Ecco un piccolo campione sull'utilizzo

Aggiungi questo frammento al repository responsabile delle informazioni del profilo/account.

public aspnet_User GetUser() 
{ 
    MembershipUser user = Membership.GetUser(); 
    return db.aspnet_Users.SingleOrDefault(u => u.UserId == user.ProviderUserKey); 
} 

Poi dentro i modelli, è possibile ottenere l'utente e accedere alle altre informazioni memorizzate nella tabella UserProfiles.

AccountRepo accountRepo = new AccountRepo(); 
aspnet_User user = accountRepo.GetUser(); 
string Address = user.UserProfile.Address; // bingo! 

E questo è praticamente tutto!

Si tratta ovviamente di un esempio semplice, e si dovrebbe essere controllando se l'utente è nulla e si potrebbe anche creare una classe responsabile della restituzione le informazioni necessarie su un utente, implementare la cache, ecc ..