16

Sto tentando di utilizzare SimpleMembership nel mio MVC 4 per la prima volta e ho già un database esistente e il modello EF5 creato in base ad esso! Ho cercato molto ma non riesco a trovare il modo di usarlo nel mio caso e anche di avere tutto sotto il mio modello.Utilizzo di MVC 4 SimpleMembership con un modello EF di database esistente prima

Sarebbe bello se qualcuno mi potesse dare un'idea di come farlo.

Grazie

risposta

3

Nel web.config nel tag appSettings, aggiungere la riga

<add key="enableSimpleMembership" value="true"/> 

SimpleMembership è costruito in modo da qui è sufficiente scrivere

[InitializeSimpleMembership] 

sopra la vostra classe pubblica AccountController: Controller

Quando si desidera f Orce un utente di inizio attività per una certa pagina si scrive nel controller pagine

[Authorize] 

che le tabelle saranno generati automaticamente nel database. Se vuoi aggiungere più campi a queste tabelle, dovrai semplicemente googlearlo.

Ecco un link per maggiori informazioni http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx

16

puramente come un punto di riferimento, potrebbe essere una buona idea per creare un nuovo modello Internet Application di un progetto di applicazione Web ASP.NET MVC 4 (cioè tramite File> Nuovo progetto).

Se si guarda il AccountController, come dice @zms6445, è decorato con un attributo InitializeSimpleMembership. È possibile trovare l'implementazione di questo attributo nel file InitializeSimpleMembershipAttribute.cs nella cartella Filters all'interno della directory root.

Qui, questa è la parte mancante del puzzle: è necessario collegare il database esistente in modo che venga utilizzato dallo SimpleMembershipProvider. Questo è il codice è necessario:

private class SimpleMembershipInitializer 
{ 
    public SimpleMembershipInitializer() 
    { 
     try 
     { 
      if (!WebSecurity.Initialized) 
      { 
       WebSecurity.InitializeDatabaseConnection("CONNECTION_STRING_NAME", "USER_TABLE", "USER_ID_FIELD", "USER_NAME_FIELD", autoCreateTables: true); 
      } 
     } 
     catch (Exception ex) 
     { 
      throw new InvalidOperationException("Something is wrong", ex); 
     } 
    } 
} 

Alcune cose da notare:

  1. CONNECTION_STRING_NAME è una voce nel vostro ConnectionStrings web.config - Non è possibile utilizzare la stringa di connessione modello di qui - il SimpleMembershipProvider non lo fa riconosci questo formato! Devi specificare una stringa di connessione System.Data.SqlClient, ad es.

    < add name = "CONNECTION_STRING_NAME" connectionString = "origine dati = SERVER; catalogo iniziale = DATABASE; ID utente = UTENTE; password = PASSWORD;" providerName = "System.Data.SqlClient"/>

  2. USER_TABLE è la tabella nel database per contenere le informazioni dell'utente in più, come ad esempio nome, cognome ecc Questo è legato alle tabelle generati automaticamente tramite l'USER_ID_FIELD.

  3. USER_ID_FIELD è in genere la chiave primaria della tabella Utenti. Deve essere di tipo int.

  4. USER_ID_NAME è un nome univoco per l'utente, che potrebbe essere un indirizzo di posta elettronica.

  5. è impostato su true per garantire che le tabelle richieste per il funzionamento di SimpleMembership vengano create se non esistono già.

Naturalmente, questo codice solo s'incendia se si colpisce una pagina tramite il AccountController, dal momento che questo è stato decorato dal attributo. Potresti inserire un punto di interruzione e vederlo in azione.

Questo dovrebbe iniziare: il modello di applicazione Internet è un modello piuttosto buono da seguire se rimani bloccato.

Spero che questo aiuti.

+0

Ho seguito le tue istruzioni ma ottengo una TargetInvocationException da LazyInitializer. Qualche idea al riguardo? –

+1

L'ho trovato :) Il firewall del server SQL causa l'errore! Odio i firewall :) –

+2

@ UmutCanKöseali Penso di avere lo stesso problema, come disattivare il firewall sql? – Cybercop