Personalizzazione di Asp.Net Identity 3.0

asp.net asp.net-core asp.net-identity c# entity-framework-core

Domanda

Voglio personalizzare le classi di Asp.Net Identity 3.

Ecco cosa ho fatto:

public class MyDbContext : IdentityDbContext<User>

e

public class User : IdentityUser<int>

Ho anche esteso IdentityUserClaim<int>, IdentityRole<int>, IdentityUserLogin<int> and IdentityUserRole<int> ma ottengo il seguente errore:

The type 'User' cannot be used as type parameter 'TUser' in the generic type or method' IdentityDbContext<TUser>'.There is no implicit reference conversion from 'User' to 'Microsoft.AspNet.Identity.EntityFramework.IdentityUser'.

Risposta accettata

Non so come abbia fatto la tua classe ad ereditare IdentityUser<int> come versione generica di 'IdentityUser' ha più parametri di tipo. Controlla qui: https://msdn.microsoft.com/en-us/library/dn613256%28v=vs.108%29.aspx

Quindi, avrai bisogno di:

public class User : IdentityUser<int, UserLogin, UserRole, UserClaim>

e:

public class UserRole : IdentityUserRole<int> { }
public class UserClaim : IdentityUserClaim<int> { }
public class UserLogin : IdentityUserLogin<int> { }

Modifica: per Identity 3.0 le cose sono un po 'diverse, ma il problema è simile. Secondo: https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNet.Identity.EntityFramework/IdentityDbContext.cs

IdentityDbContext<TUser> è come questo:

public class IdentityDbContext<TUser> : IdentityDbContext<TUser, IdentityRole, string> where TUser : IdentityUser
{ }

Parte importante è where TUser : IdentityUser Definizione di IdenityUser è:

public class IdentityUser : IdentityUser<string>
{ ... }

E la tua classe User eredita IdentityUser<int> modo che non abbia una conversione implicita in 'IdentityUser' perché string differenza int / string .

La soluzione sarebbe ereditare da IdentityDbContext<TUser, TRole, TKey> dove TUser sarebbe la tua classe User , TRole sarebbe una nuova classe Role che iherits IdentityRole<int> e TKey è int :

public class MyDbContext : IdentityDbContext<User, Role, int> {...}
public class User : IdentityUser<int> {...}
public class Role : IdentityRole<int> {...}

Risposta popolare

Questo dovrebbe essere sufficiente:

public class ApplicationUser : IdentityUser<int>
{

}

public class ApplicationRole : IdentityRole<int>
{

}

public class MyDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, int>
{

}



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché