2015-08-03 17 views
29

Tutti gli esempi che ho visto per ASP.NET Identity 3.0 utilizzano Entity Framework per archiviare i dati relativi all'utente.Come utilizzare ASP.NET Identity 3.0 senza Entity Framework

Esistono esempi che non utilizzano Entity Framework e in cui la classe ApplicationUser non viene derivata da Microsoft.AspNet.Identity.EntityFramework.IdentityUser?

In ASP.NET Identity 2.x è stato necessario implementare l'interfaccia IUser. Sembra che non ci sia questa interfaccia ora - quindi non siamo sicuri su come definire correttamente la classe User. Non c'è quasi nessuna documentazione su questo argomento.

Il secondo problema è con AddIdentity chiamata in Startup.ConfigureServices. È piuttosto legato alle classi particolari dallo spazio dei nomi Microsoft.AspNet.Identity.EntityFramework e non è chiaro come registrare i servizi di identità senza tali classi.

+1

Questo è un esempio buono e di lavoro, (MVC 6) e lib di implementazione con framework ASP.NET 5 Identity (> = v3) senza Entity Framework per MongoDB.Driver (> = v2.1.0) https://github.com/saan800/SaanSoft.AspNet.Identity3.MongoDB –

+22

Questo è una domanda specifica su un problema comune, che cambia con ciascuna versione di Identity: come si rimuove chirurgicamente EF da Identity in modo da poter utilizzare altri dati tecnologie di accesso. Non ha nulla a che fare con la raccomandazione di uno strumento. @Martijn Pieters hai letto la domanda prima di chiuderla? Riapri urgentemente questa domanda! – bbsimonbb

+0

@ user1585345 (sarcasm) Ovviamente fuori tema ... chi in questo sito parla di asp.net, identità, framework di entità, ecc ... (/ sarcasmo) –

risposta

12

ho implementato nel mio progetto, le principali cose che hai da implementare è UserStore e Rolestore

mie classi SiteUser e SiteRole non ereditano da tutto ciò

la cosa principale è quello di aggiungere i propri servizi prima di lasciare l'asp.identità netta aggiungere i propri servizi

services.TryAdd(ServiceDescriptor.Scoped<IUserStore<SiteUser>, UserStore<SiteUser>>()); 
services.TryAdd(ServiceDescriptor.Scoped<IUserPasswordStore<SiteUser>, UserStore<SiteUser>>()); 
services.TryAdd(ServiceDescriptor.Scoped<IUserEmailStore<SiteUser>, UserStore<SiteUser>>()); 
services.TryAdd(ServiceDescriptor.Scoped<IUserLoginStore<SiteUser>, UserStore<SiteUser>>()); 
services.TryAdd(ServiceDescriptor.Scoped<IUserRoleStore<SiteUser>, UserStore<SiteUser>>()); 
services.TryAdd(ServiceDescriptor.Scoped<IUserClaimStore<SiteUser>, UserStore<SiteUser>>()); 
services.TryAdd(ServiceDescriptor.Scoped<IUserPhoneNumberStore<SiteUser>, UserStore<SiteUser>>()); 
services.TryAdd(ServiceDescriptor.Scoped<IUserLockoutStore<SiteUser>, UserStore<SiteUser>>()); 
services.TryAdd(ServiceDescriptor.Scoped<IUserTwoFactorStore<SiteUser>, UserStore<SiteUser>>()); 
services.TryAdd(ServiceDescriptor.Scoped<IRoleStore<SiteRole>, RoleStore<SiteRole>>()); 

alcuni degli stessi interfsaces saranno registrati qui, ma userà il vostro se sono registrati prima

services.AddIdentity<SiteUser, SiteRole>(); 
+1

Grazie. Facciamo il modo simile nella nostra soluzione. – Sergiy

+0

come si risolve il fatto che non utilizza una transazione? – gilmishal

+0

@gilmishal, credo che l'implementazione di UserStore debba chiamare l'implementazione del repository non EF. Questo repository può utilizzare le transazioni se partecipa a un'unità di lavoro, che può legare l'inizio della transazione all'inizio dell'azione e la fine della transazione fino alla fine dell'operazione di business prima di restituire il risultato dell'azione. –

2

Esistono esempio che non usa EntityFramework e dove la classe ApplicationUser non deriva da Microsoft.AspNet.Identity.EntityFramework.IdentityUser?

Poiché ASP.NET Identity 3 fa parte di .NET Framework 5, che è ancora inedito, suppongo che non troverete esempi.

In ASP.NET Identity 2.x è stato necessario implementare l'interfaccia IUser. Sembra che non ci sia questa interfaccia ora - quindi non siamo sicuri su come definire correttamente la classe "User". Non c'è quasi nessuna documentazione su questo argomento.

Anche in questo caso, la mancanza di documenti è probabilmente dovuta alla natura inedita del software. Tuttavia, guardando solo a the source code, sembra che ApplicationUser possa derivare da qualsiasi oggetto POCO, senza la necessità di implementare un'interfaccia IUser<TKey>.

Per quanto riguarda la configurazione dei servizi, dare un'occhiata a IdentityServiceCollectionExtensions e IdentityEntityFrameworkBuilderExtensions. Sembra che il primo sia nel nucleo dell'identità come mezzo per fornire un contesto all'interno del quale registrare i servizi per l'identità dell'applicazione, mentre il secondo è un'implementazione specifica per l'entità che utilizza quel contesto.

La soluzione per l'implementazione di qualcosa che utilizza ASP.NET Identity 3 ma non EF sembra che si tratterebbe semplicemente di fornire implementazioni diverse per le interfacce del servizio di identità e quindi di collegare tali dipendenze durante la configurazione dell'app. È possibile utilizzare l'implementazione di EntityFramework di base come guida per la modalità DIY. Ma caveat emptor, l'identità 3 potrebbe cambiare di nuovo prima del rilascio finale, quindi tutto ciò che costruisci contro l'identità 3 ora è soggetto a modifiche.

Problemi correlati