¿Es posible utilizar la nueva identidad de Asp.net con Database First y EDMX? ¿O solo con el código primero?
Esto es lo que hice:
1) Hice un nuevo proyecto MVC5 e hice que la nueva identidad creara las nuevas tablas de usuarios y roles en mi base de datos.
2) Luego abrí mi archivo Database First EDMX y lo arrastré en la nueva tabla Identity Users ya que tengo otras tablas que se relacionan con ella.
3) Al guardar el EDMX, el generador de POCO de Database First creará automáticamente una clase de usuario. Sin embargo, UserManager y RoleManager esperan una clase de usuario heredada del nuevo espacio de nombres de identidad (Microsoft.AspNet.Identity.IUser), por lo que el uso de la clase de usuario de POCO no funcionará.
Supongo que una posible solución es editar mis clases de generación de POCO para que mi clase de usuario herede de IUser.
¿O ASP.NET Identity solo es compatible con Code First Design?
++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
Actualización: Siguiendo la sugerencia de Anders Abel a continuación, esto es lo que hice. Funciona, pero me pregunto si hay una solución más elegante.
1) Extendí la clase de usuario de mi entidad creando una clase parcial dentro del mismo espacio de nombres que mis entidades generadas automáticamente.
namespace MVC5.DBFirst.Entity
{
public partial class AspNetUser : IdentityUser
{
}
}
2) Cambié mi DataContext para heredar de IdentityDBContext en lugar de DBContext. Tenga en cuenta que cada vez que actualice su EDMX y vuelva a generar las clases DBContext y Entity, tendrá que volver a configurar esto.
public partial class MVC5Test_DBEntities : IdentityDbContext<AspNetUser> //DbContext
3) Dentro de su clase de entidad de usuario generada automáticamente, debe agregar la palabra clave de anulación a los siguientes 4 campos o comentar estos campos ya que se heredan de IdentityUser (Paso 1). Tenga en cuenta que cada vez que actualice su EDMX y vuelva a generar las clases DBContext y Entity, tendrá que volver a configurar esto.
override public string Id { get; set; }
override public string UserName { get; set; }
override public string PasswordHash { get; set; }
override public string SecurityStamp { get; set; }