2014-11-29 4 views
5

Вот мой код, хотя я уже уточнил ключевой атрибут, но все еще есть проблема.Тип сущности не имеет определенного ключа EF6

public class Contacts 
{ 
    [Key] 
    public int ContactId { get; set; } 
    public string Name { get; set; } 
    public string Address { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Zip { get; set; } 
    [DataType(DataType.EmailAddress)] 
    public string Email { get; set; } 
} 

Ошибки я получаю:

Тип объекта 'Контакты' не имеет ключа определен. Определите ключ для этого типа сущности.
Тип сущности: EntitySet «Контакты» основан на типе «Контакты», который не имеет ключа, определенный

+1

Действительно ли? Восстановили ли вы после установки атрибута «Key»? Кроме того, я бы назвал класс «Контакт», потому что он представляет собой 1 контакт, а не набор контактов. –

+0

yes @Gert, я перестроил его, но проблема как в определении именования класса и идентификатора. Спасибо в любом случае :) – Affuu

+2

Хорошо, хорошо для вас, но это не имеет смысла. Ключевого атрибута здесь должно быть достаточно. Я думаю, что происходит что-то еще. –

ответ

7

Если вы используете EF Code First (не указан в вашем вопросе), вам нужно будет изменить свойство ContactId name to ContactsId для соответствия стандарту ClassName + Id для определения ключа для вашего Контакты тип сущности.

См MSDN Code First конвенции: http://msdn.microsoft.com/en-us/data/jj679962.aspx

+1

Когда есть атрибут 'Key', соглашения ничего не делают. –

+0

Эй это сработало :) спасибо :) @jhischier – Affuu

+0

тоже работал для меня. не мог понять этого – steveareeno

0

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

Эта ошибка произошла для меня, даже имея [Key], определенный над свойством, которое я хотел обозначить как Первичный ключ. Ошибка, возникающая во время команды Update-Database, была вызвана тем, что мое имя миграции (через Add-Migration) совпадает с именем, которое я хотел добавить. Это связано с тем, что команда Add-Migration создала частичный класс, который соответствовал имени сущности.

Например:

public class Contacts 
{ 
    [Key] 
    public int ContactId { get; set; } 
    public string Name { get; set; } 
} 

Не работает, когда я выполнил:

Add-Migration Contacts 
Update-Database 

, потому что класс миграции подпись выглядела ниже, а тело не содержит свойство с [Key] атрибут

public sealed partial class Contacts 

Чтобы решить эту проблему, я удалил именованную миграцию и модифицировал команда Add-Migration:

Add-Migration ContactsTable 
Update-Database