Как исправить System.Data.Edm.EdmEntityType не имеет ключа

Кто-нибудь знает, как исправить эту ошибку:

System.Data.Edm.EdmEntityType:: EntityType "BlogTags" не имеет ключа. Определите ключ для этого EntityType.

Использование MVC 3 с платформой Entity Framework.

Ответы

Ответ 1

Ошибка сообщает вам все, что вам нужно знать: "Определите ключ для этого EntityType".

В EF все объекты должны иметь первичные ключи некоторого типа.

Ответ 2

Просто поставьте [Key] поверх своего свойства (которое представляет первичный ключ). Что-то вроде этого,

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

Ответ 3

MVC3 автоматически распознает ключ сущности, если он соответствует соглашению "Id" или "EntityNameId". Кроме того, объект должен представить это как СОБСТВЕННОСТЬ, и он должен быть PUBLIC. Я допустил ошибку при использовании protected для моего свойства и получил эту ошибку.

Хорошим примером является:

public int Id { get; set; }

ИЛИ

public int EntityNameId { get; set; }

Используйте атрибут [Key], если вы не можете следовать этому соглашению ИЛИ если вы хотите быть очень явным в своем коде.

Ответ 4

В духе совместного использования решений одной и той же проблемы...

У меня была та же проблема, но она не была исправлена ​​решением [Key] при кодировании приложения MVC 4 с VS2012.

Я забыл включить геттер и сеттеры в своих участников модели. Просто сделать их общедоступными недостаточно, и Visual Studio предоставит вам такое же сообщение об ошибке.

Я определил 5 сценариев, которые приводят к появлению этого сообщения - в небольшом сообщении в блоге об этом.

Ответ 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();
    }
}

Ответ 6

Тот же сценарий, что и @Gilesey. В моем случае я должен был пометить ключевой атрибут public,

public int Id {get; задавать; }