tutorial net mvc framework first español code asp and c# asp.net-mvc-5 entity-framework-6 ef-model-builder

c# - net - entity framework tutorial



¿Se resuelven los errores "Sin clave definida" al usar OnModelCreating con ApplicationDbContext? (3)

He intentado crear propiedades de navegación para mis tipos de colección y encontré este ejemplo de cómo una persona lo logró usando OnModelCreating. Lo probé en mi aplicación MVC 5 y recibí este error al intentar actualizar mi base de datos:

Uno o más errores de validación se detectaron durante la generación del modelo:

BlogEngine.Models.IdentityUserLogin:: EntityType ''IdentityUserLogin'' no tiene una clave definida. Defina la clave para este EntityType. BlogEngine.Models.IdentityUserRole:: EntityType ''IdentityUserRole'' no tiene una clave definida. Defina la clave para este EntityType. IdentityUserLogins: EntityType: EntitySet ''IdentityUserLogins'' se basa en el tipo ''IdentityUserLogin'' que no tiene claves definidas. IdentityUserRoles: EntityType: EntitySet ''IdentityUserRoles'' se basa en el tipo ''IdentityUserRole'' que no tiene claves definidas.

¿Cómo resuelvo estos errores "Sin clave definida"?

Hice algunas búsquedas y encontré esta solución para un problema de un usuario, pero sus necesidades eran diferentes a las mías. Las soluciones parecían complicadas por lo que estoy tratando de hacer.

Este es el código que causa el problema:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false) { } //public DbSet<Image> Images { get; set; } public static ApplicationDbContext Create() { return new ApplicationDbContext(); } public DbSet<Post> Posts { get; set; } public DbSet<Image> Images { get; set; } public DbSet<Album> Albums { get; set; } public DbSet<Tag> Tags { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<Post>(). HasOptional(e => e.Tags). WithMany(). HasForeignKey(m => m.Tags_Id); modelBuilder.Entity<Tag>(). HasOptional(e => e.Posts). WithMany(). HasForeignKey(m => m.Posts_Id); } }

Aquí están mis modelos con la relación de muchos a muchos:

Modelo de Post.cs en Gist

Modelo Tag.cs ​​en Gist

Actualiza para mostrar IdentityUser:

public class ApplicationUser : IdentityUser { public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) { // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); // Add custom user claims here return userIdentity; } }


Sé que esta es una respuesta tardía, ¡y esto solo puede funcionar para las personas que trabajan con tutoriales o proyectos escolares!

Para mí, la eliminación de la base de datos, .mdf y la carpeta de migraciones lo solucionó. Ahora, no sé si estás usando migraciones, pero esto funcionó para mí.

Soy un novato, pero lo que noté es que Identity es muy quisquilloso con las teclas. Eliminar la migración ha ayudado con cada problema de migración (olvidado de Dios) que he tenido con mi proyecto.



Creo que el problema es que eliminó la convocatoria de la clase base de OnModelCreating . Intente agregar eso también como se muestra a continuación

protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); //Your configuration goes here }