Relazione tra ASPNET Tabelle provider di appartenenze e Tabelle personalizzate Membership

StackOverflow https://stackoverflow.com/questions/1829832

  •  11-09-2019
  •  | 
  •  

Domanda

ho attraversato un esempio fornitore profilo personalizzato qualche tempo fa e io sono ora rivisitare esso.

Il mio database ha tutte le dbo.aspnet_ * tabelle create quando mi sono imbattuto la registrazione aspnet procedura guidata. In queste tabelle ho aspnet_Profile che ha un vincolo FK indicando aspnet_Users.

ho anche due tabelle in MyDB: Il primo, dbo.ProfileData, ha un vincolo di chiave esterna indicando dbo.Profile.

Quello che voglio capire è come le tabelle di MyDB riguardano quelle in dbo.aspnet_ *. Non dovrebbe esserci un vincolo di chiave esterna (o qualche tipo di rapporto) tra le tabelle di profili in MyDB e le tabelle ASPNET? Alcune discussioni di come le mie tabelle personalizzate si riferiscono a quelli forniti da aspnet sarebbe meraviglioso.

Grazie in anticipo.

È stato utile?

Soluzione

Ci sono due opzioni che posso vedere, entrambi i quali consentiranno di ottenere sostanzialmente lo stesso risultato:

  • FK da dbo.aspnet_User.UserID a dbo.Profile.UserID, quindi definire una chiave univoca sulla dbo.Profile.UserID (a meno che non lo si utilizza come colonna PK per dbo.Profile)

  • FK da dbo.aspnet_Profile.ProfileID a dbo.Profile.ProfileID

dbo.aspnet_User è logicamente 1 - 1 con dbo.aspnet_Profile, quindi non importa quale approccio si utilizza come si continua a ottenere la stessa integrità relazionale.

Se si sta sostituendo la tabella di profilo dei dati di serie con una propria implementazione allora ha più senso usare il primo suggerimento, altrimenti se si sta estendendo lo schema profilo quindi utilizzare il secondo suggerimento.

Modifica

aspnet_Profile è la tabella di serie - il SqlProfileProvider standard di memorizza i dati del profilo dell'utente come un elenco di proprietà serializzato in aspnet_Profile, quindi, perché non c'è un tavolo aspnet_ProfileData separato.

Questo approccio consente lo schema profilo da personalizzare facilmente per diverse applicazioni senza richiedere alcuna modifica al database sottostante, ed è la soluzione ottimale per un quadro come NET. Lo svantaggio è che SQL Server non ha facile accesso a questi dati a tutti, quindi è molto più difficile per indicizzare, aggiornare e interrogare dati del profilo dell'utente utilizzando T-SQL e la logica turni set.

L'approccio più comune che ho visto per rimuovere questa limitazione è di estendere il SqlProfileProvider standard per scrivere in una tabella dati profilo personalizzato che include colonne specifiche per le proprietà del profilo specifici dell'applicazione. Questa tabella naturalmente ha un rapporto 1-1 con la tabella aspnet_Profile, quindi ha una chiave esterna come sopra indicato.

Il ruolo del fornitore esteso è quello di promuovere specifiche proprietà di profilo alle colonne durante profilo scrive, e leggere nelle colonne quando il profilo viene recuperato.

Questo permette di mixare-and-match soluzioni di storage su una base come-bisogni, a patto che il fornitore estesa sa ricadere l'implementazione standard in cui non 'sa' su un determinato immobile.

penso sempre che è meglio lasciare le tabelle di appartenenza standard, così com'è, ed estendere, se necessario, utilizzando le nuove tabelle con opportune chiavi esterne, quindi sottoclasse il provider appropriato e sovrascrivere i metodi provider con una propria implementazione (chiamando nella base implementazione ove possibile).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top