2013-04-25 8 views
10

Ich bin neu in MVC sowie das Entity-Framework. Ich suchte viel und finde einige ähnliche Fragen (z. B. Entity Type Has No Key Defined), aber sie lösen mein Problem nicht.Entitätstyp hat keinen Schlüssel definiert - Code zuerst

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

Wenn ich versuche, den Controller gibt es den folgenden Fehler hinzuzufügen:

Error

Antwort

14

Typischerweise Code zunächst durch Konvention implizit setzt Schlüssel für Entitätstyp wenn Eigenschaft gestattet Id oder TypeName+Id. In Ihrem Fall ist TypeId keiner von ihnen, so sollten Sie explizit markieren Sie ihn als Schlüssel, KeyAttribute oder mit fließend Syntax, mit EntityTypeConfiguration.HasKey Method

+0

Ich änderte, wie Sie vorschlagen, aber auch es gibt denselben Fehler: Bitte beachten Sie die Bearbeitung in Frage – DevT

+1

Das sollte einen Fehler behoben haben.Vielleicht sollten Sie die Lösung neu erstellen, damit es funktioniert – archil

+0

nach dem Wiederaufbau funktioniert es ... danke ..... :) – DevT

1

ich hatte das gleiche Problem. Ich habe das Projekt 3 mal neu gestartet, bevor ich die Lösung gefunden habe, die für mich funktioniert hat. Ich hatte eine öffentliche Klasse, die ich manuell erstellt habe, namens UserContext. Wenn ich den Assistenten ausführte, um eine ADO-Klasse hinzuzufügen, generierte der Assistent eine partielle Klasse von UserContext. Ich löschte meine usercontext Klasse und ich änderte die Klasse, die VS für mich generierte.

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

    public class UserContext : DbContext 
    { 

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

Nun könnte es ohne die Änderung funktioniert haben. Vielleicht würde das Löschen meiner Version der Klasse funktionieren. Ich weiß es nicht. In retropect habe ich Ihren Fehler gefunden, als ich versucht habe, den Controller hinzuzufügen. Ich vermute, dass dies ein Fehler in VS2012 ist, da eine partielle Klasse und eine öffentliche Klasse mit demselben Namen existieren können. Die Absicht ist, dem Programmierer zu erlauben, die Definition der partiellen Klasse zu erweitern.

1

Add-Namespace

using System.ComponentModel.DataAnnotations; 

key-Attribut auf Ihre CustomerID wie diese

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

dann die Anwendung erstellen und versuchen Controller hinzuzufügen. Dies funktioniert

0

Fehler beim Ausführen des ausgewählten Codegenerators, der keine Metadaten für den Entitätstyp abrufen kann, hat keinen Schlüssel definiert.

  • eine wichtige Sache SQL-Tabelle nimmt nur [Id] dann Entität Rahmen funktioniert, wenn Sie andere Primärschlüssel verwenden wie [MenuID] es gewohnt.
  • sollten Sie die Validierung Modell hinzufügen, die durch 1
  • Spalte order = 1, da nach [key] hinzugefügt, um seine Inkrementtaste und Spaltenreihenfolge ist, dass warum

Modell

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

ist dann Erstellen Sie dies nach dem Erstellen eines Controllers unter Entity-Frame-Arbeit wird es funktionieren

ich hoffe, es hilft.

Verwandte Themen