Подтвердить что ты не робот

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; }
    }
}
4b9b3361

Ответ 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-контекст не смог связаться с БД.

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