Тип объекта не имеет определенного ключа - Код сначала

Я новичок в MVC, а также в структуре сущности. Я искал много и находил несколько похожих вопросов (например, Тип сущности без ключа), но они не решают мою проблему.

namespace MvcAppInvoice.Models
{
    public class Customer
    {
        public int CustomerID { get; set; }
        public string FirstName { get; set; }
        public string SurName { get; set; }
        public virtual CustomerType Type { get; set; }
    }

    public class CustomerType
    {
        public int TypeId { get; set; }
        public string TypeName { get; set; }
        public virtual ICollection<Customer> customers { get; set; }
    }
}

Add Controller

Когда я пытаюсь добавить контроллер, он дает следующую ошибку:

Error

Ответ 1

Как правило, код сначала по соглашению неявно устанавливает ключ для типа сущности, если свойство имеет имя Id или TypeName+Id. В вашем случае TypeId не является ни одним из них, поэтому вы должны явно отмечать его как ключ, используя KeyAttribute или с плавным синтаксисом, используя Метод EntityTypeConfiguration.HasKey

Ответ 2

У меня была та же проблема. Я перезапустил проект 3 раза, прежде чем нашел решение, которое сработало для меня. У меня был открытый класс, который я создал вручную с помощью UserContext. Когда я запустил мастер для добавления класса ADO, мастер создал неполный класс UserContext. Я удалил свой класс usercontext, и я изменил класс, созданный для меня VS.

namespace UserLayer.Models
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;

    public class UserContext : DbContext
    {

        public DbSet<UserDetail> UserDetails { get; set; }
    }
}

Теперь он, возможно, работал без модификации. Возможно, удастся удалить мою версию класса. Я не знаю. В ретроспективе я столкнулся с вашей ошибкой, когда попытался добавить контроллер. Я подозреваю, что это ошибка в VS2012, потому что может существовать неполный класс и открытый класс с таким же именем. Цель состоит в том, чтобы позволить программисту расширить определение частичного класса.

Ответ 3

Добавить пространство имен

using System.ComponentModel.DataAnnotations;

Добавить ключевой атрибут в свой идентификатор клиента как это

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

затем создайте приложение и попробуйте добавить контроллер. Это будет работать

Ответ 4

произошла ошибка при запуске выбранного генератора кода, который не смог получить метаданные для типа сущности, не определил ключ.

  • еще одна важная вещь sql table принимает только [Id], затем объект framework будет работать, если вы используете другой первичный ключ, например [MenuId] привычка.
  • вам следует добавить валидацию на модель, которая является порядком клавиш и столбцов
  • column order = 1, потому что после [key] добавлено его значение на 1, что почему

Model

[Key]
        [Column(Order = 1)]
        public int RoleIdName { get; set; }

затем создайте это после создания контроллера под фреймворком сущности, он будет работать

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