Regler:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication1.Models;
using System.ComponentModel.DataAnnotations.Schema;
namespace MvcApplication1.Controllers
{
public class studentsController : Controller
{
//
// GET: /students/
public ActionResult details()
{
int id = 16;
studentContext std = new studentContext();
student first = std.details.Single(m => m.RollNo == id);
return View(first);
}
}
}
DbContext-Modell:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace MvcApplication1.Models
{
public class studentContext : DbContext
{
public DbSet<student> details { get; set; }
}
}
Modell:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
namespace MvcApplication1.Models
{
[Table("studentdetails")]
public class student
{
public int RollNo;
public string Name;
public string Stream;
public string Div;
}
}
Datenbanktabelle:
CREATE TABLE [dbo].[studentdetails](
[RollNo] [int] NULL,
[Name] [nvarchar](50) NULL,
[Stream] [nvarchar](50) NULL,
[Div] [nvarchar](50) NULL
)
In global.asax.cs
Database.SetInitializer<MvcApplication1.Models.studentContext>(null);
Der obige Code listet alle Klassen auf, an denen ich arbeite. Beim Ausführen meiner Anwendung wird folgende Fehlermeldung angezeigt:
"Ein oder mehrere Validierungsfehler wurden während der Modellgenerierung festgestellt" zusammen mit "Entitätstyp hat keinen Schlüssel definiert".
c#
.net
entity-framework
Codierer
quelle
quelle
Antworten:
Die Modellklasse sollte geändert werden in:
quelle
[Key]
) funktioniert, bis ich die Datentypen geändert habe (ich habe sie geändertunsigned
) und nur Byte funktioniert. Gibt es einen Grund, warum ich keineunsigned
Werte verwenden kann?Stellen Sie sicher, dass öffentliche Mitglieder der Schülerklasse als Eigenschaften mit definiert sind
{get; set;}
(Ihre sind öffentliche Variablen - ein häufiger Fehler).Platzieren Sie eine
[Key]
Anmerkung auf der von Ihnen ausgewählten Immobilie.quelle
Dies kann mehrere Gründe haben. Einige davon habe ich hier gefunden , andere habe ich selbst entdeckt.
Id
, müssen Sie das[Key]
Attribut hinzufügen .public
uint
,ulong
usw. sind nicht erlaubt.quelle
private set
während einer Bereinigung von einigen Eigenschaften entfernt . Das Ergebnis war "EntityType hat keinen vom Schlüssel definierten Fehler". Achten Sie daher darauf, dass die Bereinigungstools den erforderlichen Code entfernen.ID
,Id
,ClassNameID
,ClassNameId
müssen Sie nicht verwenden müssen[Key] attribute
Ich weiß, dass dieser Beitrag zu spät ist, aber diese Lösung hat mir geholfen:
[Spalte (Reihenfolge = 0)] hinzugefügt, nachdem [Schlüssel] schrittweise um 1 hinzugefügt werden kann:
etc...
quelle
In meinem Fall wurde beim Erstellen eines "MVC 5-Controllers mit Ansicht unter Verwendung von Entity Framework" der Fehler angezeigt.
Ich musste das Projekt nur nach dem Erstellen der Model-Klasse erstellen und musste nicht die Annotation [Key] verwenden.
quelle
Die Verwendung des [Schlüssels] hat bei mir nicht funktioniert, die Verwendung einer id-Eigenschaft jedoch. Ich füge diese Eigenschaft einfach meiner Klasse hinzu.
quelle
[Key]
, aber eine Eigenschaft namens "id
" wird auch funktionieren.Das Objekt muss ein Feld enthalten, das als verwendet
Primary Key
wird. Wenn Sie ein Feld mit dem Namen haben,Id
ist dies standardmäßig der Primärschlüssel des Objekts, mit dem Entity Framework verknüpft wird.Andernfalls sollten Sie das
[Key]
Attribut über dem Feld hinzufügen, das Sie als verwenden möchtenPrimary Key
, und Sie müssen auch den Namespace hinzufügenSystem.ComponentModel.DataAnnotations
:https://stackoverflow.com/a/51180941/7003760
quelle
Denken Sie außerdem daran: Vergessen Sie nicht, ein solches öffentliches Schlüsselwort hinzuzufügen
Sie müssen das öffentliche Schlüsselwort wie folgt verwenden
quelle
Der Grund, warum das EF-Framework "kein Schlüssel" anfordert, ist, dass das EF-Framework einen Primärschlüssel in der Datenbank benötigt. Um EF deklarativ mitzuteilen, welche Eigenschaft der Schlüssel ist, fügen Sie eine
[Key]
Anmerkung hinzu. Oder fügen Sie am schnellsten eineID
Eigenschaft hinzu. Dann wird das EF-FrameworkID
standardmäßig als Primärschlüssel verwendet.quelle
partial
Klasse generiert . Sie können eine zweite Datei alspartial
Klasse mit demselben Namen erstellen und die Eigenschaft mit dem[Key]
Attribut erneut hinzufügen .Sie müssen nicht immer das Schlüsselattribut verwenden. Stellen Sie sicher, dass die Zuordnungsdatei den Schlüssel ordnungsgemäß adressiert hat
und vergessen Sie nicht, das Mapping im OnModelCreating des Repositorys hinzuzufügen
quelle
Für mich war das Modell in Ordnung. Das lag daran, dass ich zwei verschiedene Versionen des Entity Frameworks hatte. Eine Version für das Webprojekt und eine andere für das gemeinsame Projekt, das die Modelle enthält.
Ich musste nur die Nuget-Pakete konsolidieren .
Genießen!
quelle
Alles ist in Ordnung, aber in meinem Fall habe ich zwei Klassen wie diese
Nach dem Löschen der Oberschicht funktioniert es gut für mich.
quelle