tiene the para ninguna identityuserrole has for este entitytype definida define defina clave asp.net-mvc entity-framework

asp.net mvc - the - EntityType ''Category'' no tiene una clave definida. Definir la clave para este EntityType



entitytype ''identityuserrole'' no tiene ninguna clave definida. defina la clave para este entitytype. (7)

Esta pregunta ya tiene una respuesta aquí:

Desarrollando una aplicación básica ASP.net MVC 4. Es una aplicación de catálogo de productos simple, donde tengo 2 tablas de base de datos (''Categoría'' y ''Productos'')

Hay una referencia de clave externa de ''ID de categoría'' (clave principal en la tabla de Categoría) en la tabla ''Productos''.

Cuando ejecuto la aplicación, recibo un mensaje de error (se enumera a continuación).

System.Data.Entity.Edm.EdmEntityType: : EntityType ''Category'' has no key defined. Define the key for this EntityType. System.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet ''Category'' is based on type ''Category'' that has no keys defined

Esto parece un error común para los novatos, compré todas las soluciones relacionadas con ''Clave de la entidad'' y no tengo una clave definida ''. pero todavía mi problema no está resuelto, amablemente ayúdeme a comprender este problema y cuál es la solución correcta para este problema.

A continuación están mis clases modelo

Category.cs

namespace ChemicalStore.Models { public partial class Category { public int CatId { get; set; } public string CatName { get; set; } public string CatDescription { get; set; } public List<Product> Product { get; set; } } }

Products.cs

namespace ChemicalStore.Models { public class Product { public int ProductId { get; set; } public int CatId { get; set; } public string ProductTitle { get; set; } public string ProductPrice { get; set; } public string ProductDescription { get; set; } public string ProductPackage { get; set; } } }


Debe agregar el atributo [Key] antes de la propiedad CatId:

using System.ComponentModel.DataAnnotations; public partial class Category { [Key] public int CatId { get; set; } public string CatName { get; set; } public string CatDescription { get; set; } public List<Product> Product { get; set; } }

El problema es que EF solo puede funcionar cuando conoce la clave primaria de la tabla. Por defecto, EF reconoce como propiedad de clave principal con nombre Id. Si su tabla tiene otra clave principal, puede marcarla con el atributo [Key] o establecer Key con una configuración fluida.


En mi caso, solucioné este problema añadiendo el connectionString correcto en el archivo web.config / app.config.

Me olvidé de agregarlo y el DBContext no pudo comunicarse con el DB.

Espero eso ayude


Entity Framework utiliza un campo de clave principal para crear la columna de clave principal en la tabla generada.

Utiliza la convención para obtener esta columna con algunas variaciones:

  • Si el campo se llama id o cualquier varianza de la carcasa;
  • Si el campo se llama ClassNameId de cualquier variación de envoltura;

Me pueden faltar algunas convenciones más, pero estos son los casos más comunes.

Si no tiene ningún campo con estas convenciones, debe marcar su clave principal deseada con el atributo [Key] :

[Key] public int CatId { get; set; }


Hola si está obteniendo el error debajo. "" Uno o más errores de validación se detectaron durante la generación del modelo:

Checking.Models.Employee:: EntityType ''Employee'' no tiene una clave definida. Defina la clave para este EntityType. "" Simplemente compruebe el nombre de columna de la tabla y el nombre de propiedad definido iguales o no. si no, entonces corrígelo y resuelve el problema.


Las clases de entidad se generan automáticamente.

Los cambios manuales en esos archivos se sobrescribirán si el código se regenera.

Debes crear una clase parcial con todos tus metadatos

[MetadataType(typeof(Category.CategoryMetadata))] public partial class Category { internal sealed class CategoryMetadata { [Key] public int CatId { get; set; } [Required] public string CatName { get; set; } public string CatDescription { get; set; } public List<Product> Product { get; set; } } }

Lea más en MSDN


Pude resolver esto agregando un setter a mi propiedad clave; Solo tuve un getter antes.

public int Id { get; set; }


Simplemente coloque el atributo [tecla] en la identificación anterior ..

[Table("employee")] public class Employee { [Key] public int Empno { set; get; } public string Empname { set; get; } }