Manette:
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);
}
}
}
Modèle DbContext:
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
)
Dans global.asax.cs
Database.SetInitializer<MvcApplication1.Models.studentContext>(null);
Le code ci-dessus répertorie toutes les classes sur lesquelles je travaille. Lors de l'exécution de mon application, je reçois l'erreur:
"Une ou plusieurs erreurs de validation ont été détectées lors de la génération du modèle" ainsi que "Le type d'entité n'a pas de clé définie".
c#
.net
entity-framework
Codeur
la source
la source
Réponses:
La classe Model doit être remplacée par:
la source
[Key]
) jusqu'à ce que je change les types de données (je les ai changés enunsigned
) et seul l'octet fonctionne. Y a-t-il une raison pour laquelle je ne peux pas utiliser deunsigned
valeurs?Assurez-vous que les membres publics de la classe étudiante sont définis comme des propriétés avec
{get; set;}
(les vôtres sont des variables publiques - une erreur courante).Placez une
[Key]
annotation au-dessus de la propriété choisie.la source
Cela peut se produire pour plusieurs raisons. J'ai trouvé certains d'entre eux ici , d'autres que j'ai découverts par moi-même.
Id
, vous devez lui ajouter l'[Key]
attribut.public
uint
,ulong
etc. ne sont pas autorisés.la source
private set
de certaines propriétés lors d'un nettoyage. Le résultat était le "EntityType n'a pas d'erreur définie par clé". Méfiez-vous donc des outils de nettoyage supprimant le code nécessaire.ID
,Id
,ClassNameID
,ClassNameId
vous ne devez pas devez utiliser[Key] attribute
je sais que ce post est en retard mais cette solution m'a aidé:
ajouté [Column (Order = 0)] après [Key] peut être ajouté par incrément de 1:
etc...
la source
Dans mon cas, j'obtenais l'erreur lors de la création d'un "MVC 5 Controller with view, using Entity Framework".
J'avais juste besoin de construire le projet après avoir créé la classe Model et je n'avais pas besoin d'utiliser l'annotation [Key].
la source
Utiliser la [key] ne fonctionnait pas pour moi mais utiliser une propriété id le fait. Je viens d'ajouter cette propriété dans ma classe.
la source
[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
ce sera par défaut la clé primaire de l'objet vers lequel Entity Framework sera lié.Sinon, vous devez ajouter l'
[Key]
attribut au-dessus du champ que vous souhaitez utiliser commePrimary Key
, et vous devrez également ajouter l'espace de nomsSystem.ComponentModel.DataAnnotations
:https://stackoverflow.com/a/51180941/7003760
la source
N'oubliez pas non plus d'ajouter un mot clé public comme celui-ci
vous devez utiliser un mot clé public comme celui-ci
la source
La raison pour laquelle le framework EF invite "no key" est que le framework EF a besoin d'une clé primaire dans la base de données. Pour indiquer de manière déclarative à EF la propriété de la clé, vous ajoutez une
[Key]
annotation. Ou, le moyen le plus rapide, ajoutez uneID
propriété. Ensuite, le framework EF prendraID
comme clé primaire par défaut.la source
partial
classe. Vous pouvez créer un deuxième fichier en tant quepartial
classe avec le même nom et ajouter à nouveau la propriété avec l'[Key]
attribut.Vous n'êtes pas obligé d'utiliser l'attribut clé tout le temps. Assurez-vous que le fichier de mappage a correctement adressé la clé
et n'oubliez pas d'ajouter le mappage dans OnModelCreating du référentiel
la source
Pour moi, le modèle était bien. C'était parce que j'avais 2 versions différentes du framework d'entité. Une version pour le projet Web et une autre pour le projet commun qui contient les modèles.
Je devais juste consolider les paquets nuget .
Prendre plaisir!
la source
Tout va bien mais dans mon cas, j'ai deux classes comme celle-ci
Après avoir supprimé la classe supérieure, cela fonctionne très bien pour moi.
la source