2013-04-25 19 views
10

Sono nuovo a MVC e al framework di entità. Ho cercato molto e ho trovato alcune domande simili (ad esempio Entity Type Has No Key Defined) ma non risolvono il mio problema.non ha una chiave definita - Codice prima

namespace MvcAppInvoice.Models 
{ 
    public class Customer 
    { 
     public int CustomerID { get; set; } 
     public string FirstName { get; set; } 
     public string SurName { get; set; } 
     public virtual CustomerType Type { get; set; } 
    } 

    public class CustomerType 
    { 
     public int TypeId { get; set; } 
     public string TypeName { get; set; } 
     public virtual ICollection<Customer> customers { get; set; } 
    } 
} 

Add Controller

Quando provo ad aggiungere il controller dà il seguente errore:

Error

risposta

14

In genere, il codice prima per convenzione stabilisce implicitamente chiave per tipo di entità se la proprietà è chiamato Id o TypeName+Id. Nel tuo caso, TypeId è nessuno dei due, così si dovrebbe esplicitamente contrassegnare come chiave, utilizzando KeyAttribute o con la sintassi fluente, utilizzando EntityTypeConfiguration.HasKey Method

+0

Ho modificato come suggerito, ma anche lo stesso errore: vedere la modifica nella domanda – DevT

+1

Che dovrebbe avere un errore fisso.Forse dovresti ricostruire la soluzione per farlo funzionare – archil

+0

dopo aver ricostruito i suoi lavori ... grazie ..... :) – DevT

1

Ho avuto lo stesso problema. Ho riavviato il progetto 3 volte prima di trovare la soluzione che funzionava per me. Ho avuto una classe pubblica che ho creato manualmente chiamato UserContext. Quando ho eseguito la procedura guidata per aggiungere una classe ADO, la procedura guidata ha generato una classe parziale di UserContext. Ho cancellato la mia classe usercontext e ho modificato la classe generata da VS per me.

namespace UserLayer.Models 
{ 
    using System; 
    using System.Data.Entity; 
    using System.Data.Entity.Infrastructure; 

    public class UserContext : DbContext 
    { 

     public DbSet<UserDetail> UserDetails { get; set; } 
    } 
} 

Ora potrebbe aver funzionato senza la modifica. Forse cancellare la mia versione della classe avrebbe funzionato. Non lo so. In retropect ho riscontrato il tuo errore quando ho provato ad aggiungere il controller. Sospetto che questo sia un bug in VS2012 perché possono esistere una classe parziale e una public class con lo stesso nome. L'intento è di consentire al programmatore di estendere la definizione della classe parziale.

1

Add namespace

using System.ComponentModel.DataAnnotations; 

Aggiungi attributo chiave al vostro CustomerID come questo

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

poi costruire l'applicazione e tenta di aggiungere controller. Questo funzionerà

0

si è verificato un errore durante l'esecuzione del generatore di codice selezionato in grado di recuperare i metadati per il tipo di entità senza chiave definita.

  • più una importante tavola cosa sql richiede solo [Id] quindi un'entità quadro funzionerà se si utilizza altra chiave primaria come [MenuId] è abituato.
  • si dovrebbe aggiungere la convalida sul modello che è la chiave e l'ordine Colonna
  • colonna order = 1 perché dopo [tasto] ha aggiunto il suo incremento da 1 che è perché

Modello

[Key] 
     [Column(Order = 1)] 
     public int RoleIdName { get; set; } 

poi costruire questo dopo aver creato un controller sotto il lavoro di frame entità funzionerà

spero che sia d'aiuto.

Problemi correlati