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», не определил ключ ». но все же моя проблема не решена. Пожалуйста, помогите мне в понимании этой проблемы и в чем правильное решение этой проблемы.

Ниже приведены мои модельные classы

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 { 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; } } } 

Вы должны добавить атрибут [Key] перед свойством 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 { get; set; } } 

Проблема в том, что EF может работать только тогда, когда он знает первичный ключ таблицы. По умолчанию EF распознает свойство первичного ключа с именем Id. Если в вашей таблице есть другой первичный ключ, вы можете пометить его атрибутом [Key] или установить Key с плавной конфигурацией.

Entity Framework использует поле первичного ключа для создания столбца первичного ключа в сгенерированной таблице.

Он использует соглашение, чтобы получить этот столбец с некоторыми вариантами:

  • Если поле называется id или любая дисперсия обсадной колонны;
  • Если поле называется ClassNameId любой дисперсии обсадной колонны;

Возможно, мне не хватает еще нескольких соглашений, но это наиболее распространенные случаи.

Если у вас нет поля с этими соглашениями, вам нужно пометить нужный первичный ключ атрибутом [Key] :

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

Просто поместите [key] атрибут на выше id ..

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

Я смог решить это, добавив сеттера в мое ключевое свойство; Раньше у меня был только геттер.

 public int Id { get; set; } 

Классы объектов автоматически генерируются.

Ручные изменения этих файлов будут перезаписаны, если код будет восстановлен.

Вам необходимо создать частичный class со всеми вашими метаданными

  [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 { get; set; } } } 

Подробнее о MSDN

Привет, если вы становитесь ниже ошибки. «« Во время генерации модели были обнаружены одна или несколько ошибок проверки:

Checking.Models.Employee:: EntityType «Employee» не имеет определенного ключа. Определите ключ для этого EntityType. “” Просто проверьте имя столбца таблицы и определенное имя свойства так же или нет. если нет, то исправить это решение.

В моем случае я исправил эту проблему, добавив правильную connectionString в файл web.config / app.config.

Я забыл добавить его, а DBContext не смог связаться с БД.

Надеюсь, поможет

  • Почему это происходит? Самый эффективный способ получения нескольких объектов с помощью первичного ключа?
  • Как сделать Entity Framework Data Context Readonly
  • Как тестировать модули с Entity Framework 6, если вы беспокоитесь?
  • Entity Framework 6 Первые пользовательские функции кода
  • EF 4.1 code-first: Как заказать свойства навигации при использовании методов Include и / или Select?
  • LINQ to Entities не распознает метод
  • Невозможно создать постоянное значение типа В этом контексте поддерживаются только примитивные типы или типы перечислений
  • Массовое удаление в LINQ для объектов
  • linq для объектов не распознает метод
  • Динамическое подключение базы данных MySQL для Entity Framework 6
  • большая проблема в преобразовании строки в datetime с использованием linq-to-entity
  • Давайте будем гением компьютера.