Personalizando Asp.Net Identity 3.0

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

Pregunta

Quiero personalizar Asp.Net Identity 3 clases.

Aquí esta lo que hice:

public class MyDbContext : IdentityDbContext<User>

y

public class User : IdentityUser<int>

También extendí IdentityUserClaim<int>, IdentityRole<int>, IdentityUserLogin<int> and IdentityUserRole<int> pero aparece el siguiente error:

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'.

Respuesta aceptada

No sé cómo hizo que su clase heredara IdentityUser<int> ya que la versión genérica de `IdentityUser 'tiene más parámetros de tipo. Consulte aquí: https://msdn.microsoft.com/en-us/library/dn613256%28v=vs.108%29.aspx

Entonces, necesitarás:

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

y:

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

Edición: Para Identity 3.0 las cosas son un poco diferentes, pero el problema es similar. De acuerdo con: https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNet.Identity.EntityFramework/IdentityDbContext.cs

IdentityDbContext<TUser> es así:

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

Parte importante es where TUser : IdentityUser Definición de IdenityUser es:

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

Y su clase de User hereda IdentityUser<int> por lo que no tiene conversión implícita a 'IdentityUser' debido a la diferencia int / string .

La solución sería heredar de IdentityDbContext<TUser, TRole, TKey> donde TUser sería su clase de User , TRole sería la nueva clase de roles que iherits IdentityRole<int> y TKey es int :

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

Respuesta popular

Esto debería ser suficiente:

public class ApplicationUser : IdentityUser<int>
{

}

public class ApplicationRole : IdentityRole<int>
{

}

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

}


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué