Тип объекта не имеет определенного ключа - Код сначала
Я новичок в 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; }
затем создайте это после создания контроллера под фреймворком сущности, он будет работать
Надеюсь, это поможет.