Как исправить System.Data.Edm.EdmEntityType не имеет ключа - PullRequest
14 голосов
/ 11 марта 2011

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

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

Использование MVC 3 с Entity Framework.

Ответы [ 6 ]

24 голосов
/ 07 апреля 2011

Просто поместите [Ключ] поверх вашей собственности (которая представляет первичный ключ). Как то так,

[Key]
public int BlogTypeId { get; set; }
14 голосов
/ 10 октября 2011

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

Хороший пример:

public int Id { get; set; }

ИЛИ

public int EntityNameId { get; set; }

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

5 голосов
/ 11 марта 2011

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

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

3 голосов
/ 05 мая 2013

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

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

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

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

0 голосов
/ 14 июля 2013

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

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

0 голосов
/ 29 мая 2013

Интересный маленький кусочек, чтобы поделиться.В моей модели я переносил свой код из одной платформы .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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...