EntityType "Категория" не имеет определенного ключа. Определите ключ для этого EntityType
Разработка базового приложения ASP.net MVC 4. Это простое приложение каталога товаров, в котором у меня есть две таблицы базы данных ( "Категория" и "Продукты" )
В таблице "Продукты" имеется ссылка внешнего ключа "Идентификатор категории" (первичный ключ в таблице категорий).
Когда я запускаю приложение, я получаю сообщение об ошибке (см. ниже).
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
Это выглядит как обычная ошибка для новичков, я проверял все связанные решения с "Entity key", не определил ключ. но все же моя проблема не решена. Пожалуйста, помогите мне в понимании этой проблемы и в чем правильное решение этой проблемы.
Ниже приведены классы моделей
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; }
}
}
Ответы
Ответ 1
Вы должны добавить атрибут [Key] перед свойством CatId:
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; }
}
Проблема в том, что EF может работать только тогда, когда он знает первичный ключ таблицы. По умолчанию EF распознает свойство первичного ключа с именем Id. Если в вашей таблице есть другой первичный ключ, вы можете пометить его атрибутом [Key] или установить Key с плавной конфигурацией.
Ответ 2
Entity Framework использует поле первичного ключа для создания столбца первичного ключа в сгенерированной таблице.
Он использует соглашение, чтобы получить этот столбец с некоторыми вариантами:
- Если поле называется
id
или любая дисперсия обсадной колонны,
- Если поле называется
ClassNameId
любой дисперсии обсадной колонны,
Возможно, мне не хватает некоторых соглашений, но это наиболее распространенные случаи.
Если у вас нет поля с этими соглашениями, вам нужно пометить нужный первичный ключ атрибутом [Key]
:
[Key]
public int CatId { get; set; }
Ответ 3
Поместите атрибут [key] на указанный выше идентификатор.
[Table("employee")]
public class Employee
{
[Key]
public int Empno { set; get; }
public string Empname { set; get; }
}
Ответ 4
Я смог решить это, добавив сеттера в мое свойство ключа; Раньше у меня был только геттер.
public int Id { get; set; }
Ответ 5
Объектные классы автоматически сгенерированы.
Ручные изменения этих файлов будут перезаписаны, если код будет восстановлен.
Вам необходимо создать частичный класс со всеми вашими метаданными
[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; }
}
}
Подробнее о MSDN
Ответ 6
Привет, если вы получаете ошибку ниже.
"" Во время генерации модели были обнаружены одна или несколько ошибок проверки:
Checking.Models.Employee:: EntityType "Сотрудник" не имеет ключа. Определите ключ для этого EntityType. ""
просто проверьте имя столбца таблицы и определенное имя свойства так же или нет.
если нет, то исправьте это решение.
Ответ 7
В моем случае я исправил эту проблему, добавив правильную connectionString в файл web.config/app.config.
Я забыл добавить его, а DBC-контекст не смог связаться с БД.
Надеюсь, что это поможет