Controlador:
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);
}
}
}
Modelo 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; }
}
}
Modelo:
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;
}
}
Tabla de base de datos:
CREATE TABLE [dbo].[studentdetails](
[RollNo] [int] NULL,
[Name] [nvarchar](50) NULL,
[Stream] [nvarchar](50) NULL,
[Div] [nvarchar](50) NULL
)
En global.asax.cs
Database.SetInitializer<MvcApplication1.Models.studentContext>(null);
El código anterior enumera todas las clases en las que estoy trabajando. Al ejecutar mi aplicación, recibo el error:
"Se detectaron uno o más errores de validación durante la generación del modelo" junto con "El tipo de entidad no tiene una clave definida".
c#
.net
entity-framework
Descifrador
fuente
fuente
Respuestas:
La clase de modelo debe cambiarse a:
fuente
[Key]
) hasta que cambie los tipos de datos (los cambié aunsigned
) y solo el byte funciona ¿hay alguna razón por la que no puedo usarunsigned
valores?Asegúrese de que los miembros públicos de la clase de estudiantes estén definidos como propiedades w /
{get; set;}
(las suyas son variables públicas , un error común).Coloque una
[Key]
anotación en la parte superior de su propiedad elegida.fuente
Hay varias razones por las que esto puede suceder. Algunos de estos los encontré aquí , otros los descubrí por mi cuenta.
Id
, debe agregarle el[Key]
atributo.public
uint
,ulong
etc.fuente
private set
de algunas propiedades durante una limpieza. El resultado fue el "EntityType no tiene error definido clave". Así que tenga cuidado con las herramientas de limpieza que eliminan el código necesario.ID
,Id
,ClassNameID
,ClassNameId
no es necesario tener que utilizar[Key] attribute
Sé que esta publicación llega tarde, pero esta solución me ayudó:
se agregó [Columna (Orden = 0)] después de que [Clave] se puede agregar incrementando en 1:
etc ...
fuente
En mi caso, recibí el error al crear un "Controlador MVC 5 con vista, usando Entity Framework".
Solo necesitaba construir el proyecto después de crear la clase Modelo y no necesitaba usar la anotación [Clave].
fuente
Usar la [clave] no funcionó para mí, pero usar una propiedad de identificación lo hace. Acabo de agregar esta propiedad en mi clase.
fuente
[Key]
, pero una propiedad llamada "id
" también funcionará.El objeto debe contener un campo que se utilizará como
Primary Key
, si tiene un campo con nombreId
, esta será, por defecto, la clave principal del objeto al que se vinculará Entity Framework.De lo contrario, debe agregar el
[Key]
atributo sobre el campo que desea usar comoPrimary Key
, y también deberá agregar el espacio de nombresSystem.ComponentModel.DataAnnotations
:https://stackoverflow.com/a/51180941/7003760
fuente
Además, recuerde, no olvide agregar palabras clave públicas como esta
debes usar una palabra clave pública como esta
fuente
La razón por la cual el marco de trabajo de EF pide 'sin clave' es que el marco de EF necesita una clave primaria en la base de datos. Para decirle a EF de forma declarativa qué propiedad es la clave, agregue una
[Key]
anotación. O, de la manera más rápida, agregue unaID
propiedad. Entonces, el marco EF tomaráID
como clave principal por defecto.fuente
partial
clase. Puede crear un segundo archivo comopartial
clase con el mismo nombre y agregar la propiedad nuevamente con el[Key]
atributo.No tiene que usar el atributo clave todo el tiempo. Asegúrese de que el archivo de mapeo haya abordado correctamente la clave
y no olvides agregar el mapeo en OnModelCreating del Repositorio
fuente
Para mí, el modelo estaba bien. Fue porque tenía 2 versiones diferentes del marco de la entidad. Una versión para el proyecto web y otra para el proyecto común que contiene los modelos.
Solo tuve que consolidar los paquetes nuget .
¡Disfrutar!
fuente
Todo está bien, pero en mi caso tengo dos clases como esta
Después de eliminar la clase alta, funciona bien para mí.
fuente