2014-11-29 19 views
5

Ecco il mio codice anche se ho già perfezionato l'attributo chiave ma c'è ancora un problema.Il tipo di entità non ha una chiave definita 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; } 
} 

L'errore che ottengo è:

Entity Type 'Contatti' non ha alcun tasto definito. Definire la chiave per questo tipo di entità.
Tipo di entità: EntitySet 'Contatti' basata sul tipo di 'Contatti' che non ha alcun tasto definito

+1

Davvero? Sei stato ricostruito dopo aver impostato l'attributo 'Key'? Inoltre, preferisco chiamare la classe 'Contact', perché rappresenta 1 contatto, non una raccolta di contatti. –

+0

sì @Gert l'ho ricostruito, ma il problema è come nella convenzione di denominazione di classe e ID. Grazie comunque :) – Affuu

+2

Beh, buono per te, ma non ha senso. L'attributo chiave dovrebbe essere sufficiente qui. Penso che stia succedendo qualcos'altro. –

risposta

7

Se si utilizza EF primo codice (non specificate nella tua domanda), è necessario modificare la proprietà ContactId nome per ContactsId per abbinare la convenzione di ClassName + Id per definire la chiave per il tipo di entità Contatti.

Vedi le MSDN Code prime convenzioni: http://msdn.microsoft.com/en-us/data/jj679962.aspx

+1

Quando c'è un attributo 'Key' le convenzioni non fanno nulla. –

+0

Hey ha funzionato :) grazie :) @jhischier – Affuu

+0

ha funzionato anche per me. non riuscivo a capire questo fuori – steveareeno

0

So che questo è già stato risposto in un modo, ma ho voluto pubblicare un approccio diverso per coloro che incontrano questo.

Questo errore si è verificato per me pur avendo la [Chiave] definita sopra la proprietà che volevo designare come Chiave primaria. L'errore, che si è verificato durante il comando Update-Database, è stato causato dalla mia denominazione della migrazione (tramite Add-Migration) uguale all'entità che volevo aggiungere. Questo perché il comando Add-Migration ha creato una classe parziale che corrisponde al nome dell'entità.

Ad esempio:

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

non ha funzionato quando ho eseguito:

Add-Migration Contacts 
Update-Database 

perché la firma di classe di migrazione sembrava il basso, e il corpo non conteneva alcuna proprietà con il [Key] Attributo

public sealed partial class Contacts 

Per risolvere questo, ho eliminato la migrazione con nome identico e modificato il comando Aggiungi migrazione:

Add-Migration ContactsTable 
Update-Database