Ответ 1
Ошибка сообщает вам все, что вам нужно знать: "Определите ключ для этого EntityType".
В EF все объекты должны иметь первичные ключи некоторого типа.
Кто-нибудь знает, как исправить эту ошибку:
System.Data.Edm.EdmEntityType:: EntityType "BlogTags" не имеет ключа. Определите ключ для этого EntityType.
Использование MVC 3 с платформой Entity Framework.
Ошибка сообщает вам все, что вам нужно знать: "Определите ключ для этого EntityType".
В EF все объекты должны иметь первичные ключи некоторого типа.
Просто поставьте [Key] поверх своего свойства (которое представляет первичный ключ). Что-то вроде этого,
[Key]
public int BlogTypeId { get; set; }
MVC3 автоматически распознает ключ сущности, если он соответствует соглашению "Id" или "EntityNameId". Кроме того, объект должен представить это как СОБСТВЕННОСТЬ, и он должен быть PUBLIC. Я допустил ошибку при использовании protected для моего свойства и получил эту ошибку.
Хорошим примером является:
public int Id { get; set; }
ИЛИ
public int EntityNameId { get; set; }
Используйте атрибут [Key], если вы не можете следовать этому соглашению ИЛИ если вы хотите быть очень явным в своем коде.
В духе совместного использования решений одной и той же проблемы...
У меня была та же проблема, но она не была исправлена решением [Key] при кодировании приложения MVC 4 с VS2012.
Я забыл включить геттер и сеттеры в своих участников модели. Просто сделать их общедоступными недостаточно, и Visual Studio предоставит вам такое же сообщение об ошибке.
Я определил 5 сценариев, которые приводят к появлению этого сообщения - в небольшом сообщении в блоге об этом.
Промежуточное количество бит. В моей модели я портировал свой код из одной .NET-среды в другую и пропустил свойство, которое преобразует поле xml строки в XDocument. У свойства должен был быть применен NotMappedAttribute, но, как я уже сказал, я забыл, а затем начал получать эту не очень специфическую ошибку:
Во время генерации модели были обнаружены одна или несколько ошибок проверки:
\ tSystem.Data.Entity.Edm.EdmEntityType:: EntityType "XDocument" не имеет ключа. Определите ключ для этого EntityType. \ tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet "XDocuments" основан на типе "XDocument", который не имеет определенных ключей.
Я обманул хвост около часа, потому что ошибка произошла на одной из других моделей, открытых моим классом DbContext. Из-за разочарования я охотился через каждое свойство XDocument в своей сборке и BAMB! Нашел тот, у которого не было атрибута NotMapped.
Просто хотел поместить это там, чтобы кто-то другой не вытащил волосы.
Пример:
// This NotMappedAttribute was missing and is required to prevent EF
// from treating the XDocument class as an entity that requires
// a KeyAttribute.
[NotMapped] //<== missing until now
public XDocument DataXml {
get { return XDocument.Parse(this.m_Xml); }
set {
this.m_Data = value.ToString();
}
}
Тот же сценарий, что и @Gilesey. В моем случае я должен был пометить ключевой атрибут public,
public int Id {get; задавать; }