asp.net mvc - tag - ¿Cómo se puede poner a los usuarios de aplicaciones en el mismo contexto que el resto de los objetos?



que es una vista parcial mvc (3)

La aplicación stock asp.net mvc 5 crea los usuarios de la aplicación, también conocidos como usuarios de identidad en un contexto separado, llamado un archivo llamado "IdentityModels.cs" - se ve así

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
}

Estoy intentando poner a los usuarios de la Aplicación en un contexto de datos regular, es decir, algo como esto

 public class BlogProphetContext : DbContext
    {

        public DbSet<ApplicationUser> ApplicationUsers { get; set; }
        public DbSet<Answer> Answers { get; set; }
        public DbSet<Question> Questions { get; set; }
        public DbSet<Tag> Tags { get; set; }
    }

Sin embargo, cada vez que lo hago, recibo el siguiente error cada vez que intento crear una cuenta

The UserId field is required

En AccountController.cs cuando intento ejecutar la siguiente línea de código

result = await UserManager.AddLoginAsync(user.Id, info.Login);

Me da la sensación de que mi enfoque es incorrecto, y que no puedo tener ApplicationUsers en el archivo principal de contexto de datos sin algún tipo de artimaña externa. ¿Alguien sabe de alguna forma de hacerlo? Todos los archivos están actualizados.


Answer #1

Asegúrese de que su clase ApplicationUser hereda de IdentityUser.

Luego debe configurar su contexto para que asigne correctamente todas las clases de identidad de ASP.NET. Estos son:

  1. ApplicationUser (su clase)
  2. IdentityUserClaim
  3. IdentityUserLogin
  4. IdentityUserRole
  5. IdentityRole

Los detalles de esto son demasiado complicados para publicarlos aquí, pero hice un proyecto de muestra que funciona con la versión de lanzamiento de ASP.NET Identity. Puede verlo aquí: https://github.com/onybo/Asp.Net-Identity-sample-app/tree/master/CustomUser


Answer #2

No estoy seguro si esto lo ayudará o si entiendo completamente sus preguntas ... pero si quiere, intente usar su propio "modelo" y luego cambie:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("PUT IN YOUR MODEL CONN HERE")
    {
    }

No sé cuánto más puede configurar esto o si esto realmente cambiará el contexto.


Answer #3

Esto fue demasiado fácil, resulta que todo lo que tiene que hacer es eliminar el

<ApplicationUser> 

cuando llamas al contexto y todo sale como esperas (es decir, las suposiciones de MVC y las suposiciones de los desarrolladores (en este caso, las mías) se sincronizan.

Aquí está funcionando correctamente

 public class MyContext : IdentityDbContext
    {
        public MyContext()
            : base("DefaultConnection")
        {
        }
        public DbSet<ApplicationUser> ApplicationUsers { get; set; }
        public DbSet<Answer> Answers { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
        }
    }




asp.net-identity