EntityType a pas de clé d'erreur définie par l'
Contrôleur:
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 Modèle:
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; }
}
}
Modèle:
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;
}
}
Table de base de données:
CREATE TABLE [dbo].[studentdetails](
[RollNo] [int] NULL,
[Name] [nvarchar](50) NULL,
[Stream] [nvarchar](50) NULL,
[Div] [nvarchar](50) NULL
)
Mondiale.asax.cs
Database.SetInitializer<MvcApplication1.Models.studentContext>(null);
Le code ci-dessus la liste de tous les cours que je suis en train de travailler sur. Lors de l'exécution de ma demande, je reçois l'erreur:
"Une ou plusieurs erreurs de validation ont été détectés au cours de la génération de modèle" avec "type d'Entité n'a pas de clé".
- Vérifiez le fichier du dépôt. Toutes les solutions dans cette page sont étonnants, mais dans mon cas, j'ai fait tout droit, mais il a oublié de déclarer la table comme DbSet et l'ajouter à la modelbuilder.les configurations.
- Dans mon cas, j'ai fait le code pour une autre base de données et la table était absent de db
Vous devez vous connecter pour publier un commentaire.
La classe du Modèle doit être modifié pour :
[Key]
) jusqu'à ce que je change les types de données (j'ai changé pourunsigned
) et seulement octet œuvres est-il une raison que je ne peux pas utiliserunsigned
valeurs?Assurez-vous que le public et les membres des élèves de la classe sont définis comme propriétés w/
{get; set;}
(les vôtres sont publiques variables erreur la plus fréquente).Place un
[Key]
annotation sur le dessus de votre propriété choisie.Il y a plusieurs raisons pour lesquelles cela peut se produire. Certains de ces j'ai trouvé ici, d'autres que j'ai découvert sur mon propre.
Id
, vous devez ajouter le[Key]
attribuent.public
uint
,ulong
etc. ne sont pas autorisés.private set
de certaines propriétés au cours d'un nettoyage. Le résultat a été la "EntityType n'a pas de clé d'erreur". Méfiez-vous donc de nettoyage des outils de suppression de code nécessaire.ID
,Id
,ClassNameID
,ClassNameId
vous n'avez pas besoin d'utiliser[Key] attribute
je sais que ce post est en retard mais
cette solution qui m'a aidé:
ajouté [Colonne(Ordre = 0)]
après [Key]
peut être ajouté par incrément de 1:
etc...
Dans mon cas, j'ai été l'obtention de l'erreur lors de la création d'un "MVC 5 Contrôleur de vue, en utilisant Entity Framework".
J'ai juste besoin pour Construire le projet après la création du Modèle de la classe et n'a pas besoin d'utiliser la Touche [] annotation.
À l'aide de la touche [] n'a pas fonctionné pour moi, mais à l'aide d'un id de propriété t-il.
Je viens d'ajouter cette propriété dans ma classe.
[Key]
, mais une propriété appelée "id
" fonctionnera également.L'objet doit contenir un champ qui sera utilisé comme
Primary Key
, si vous avez un champ nomméId
puis ce sera, par défaut, être la clé primaire de l'objet auquel Entity Framework lien.Sinon, vous devez ajouter le
[Key]
attribut au-dessus de ce champ que vous voulez utiliser commePrimary Key
, et vous aurez également besoin d'ajouter de l'espace de nomsSystem.ComponentModel.DataAnnotations
:https://stackoverflow.com/a/51180941/7003760
La raison pour laquelle EF cadre de l'invite "pas touche" que de l'EF-cadre a besoin d'une clé primaire dans la base de données. De manière déclarative dire EF dont la propriété est la clé, vous ajoutez un
[Key]
annotation. Ou bien, la façon la plus rapide, ajouter unID
de la propriété. Ensuite, l'EF-cadre prendraID
en tant que clé primaire par défaut.partial
classe. Vous pouvez créer un deuxième fichier comme unpartial
de classe avec le même nom, et ajouter la propriété à nouveau avec le[Key]
attribut.En outre, Rappelez-vous, N'oubliez pas d'ajouter public mot-clé, comme ce
vous devez utiliser le mot-clé Public, comme ce
Vous n'avez pas à utiliser l'attribut clé de tous les temps. Assurez-vous que le fichier de mapping correctement adressé à la clé
et n'oubliez pas d'ajouter la cartographie dans le Référentiel du OnModelCreating
Pour moi, le modèle est correct. C'était parce que j'avais 2 différentes versions de l'entity framework. Une version pour le projet web et un autre pour le projet commun qui contient les modèles.
J'ai juste eu à consolider les packages nuget.
Profitez-en!
Tous est bon, mais dans mon cas j'ai deux classe comme ceci
Après la suppression de la classe supérieure, il fonctionne très bien pour moi.