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);
}
}
}
DbContext Modelo:
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 el mundial.asax.cs
Database.SetInitializer<MvcApplication1.Models.studentContext>(null);
El código anterior muestra todas las clases que estoy trabajando. Al momento de ejecutar mi aplicación estoy recibiendo el error:
«Uno o más errores de validación fueron detectados durante la generación de modelos», junto con «tipo de Entidad no tiene clave definido».
- Compruebe el archivo del repositorio. Todas las soluciones en esta página son increíbles, pero en mi caso, hice todo bien pero se me olvidó declarar la tabla como DbSet y agregar a la modelbuilder.las configuraciones.
- En mi caso, me señaló con el código a otra db y la mesa había desaparecido de db
El Modelo de la clase debe ser cambiado a :
[Key]
) hasta puedo cambiar los tipos de datos (he cambiado aunsigned
) y sólo byte obras hay una razón que no puedo usarunsigned
valores?Asegúrese de miembros públicos de la clase estudiante se define como propiedades w/
{get; set;}
(el tuyo son públicos variables – un error común).Lugar un
[Key]
anotación en la parte superior de su propiedad elegida.Hay varias razones por las que esto puede suceder. Algunos de estos he encontrado aquí, otros descubrí por mi cuenta.
Id
, usted necesita agregar el[Key]
atribuyen a él.public
uint
,ulong
etc. no están permitidos.private set
de algunas de las propiedades durante la limpieza. El resultado fue el «EntityType no tiene clave de error definido». Así que ten cuidado de la limpieza de las herramientas de extracción de código necesario.ID
,Id
,ClassNameID
,ClassNameId
que no tienen necesidad de utilizar[Key] attribute
sé que este post es tarde pero
esta solución me ayudó:
añadido [Columna(Orden = 0)]
después de la [Tecla]
puede ser añadido por el incremento de 1:
etc…
En mi caso, yo estaba recibiendo el error a la hora de crear un «MVC 5 Controlador de vista, el uso de Entity Framework».
Sólo necesitaba para Construir el proyecto después de crear el Modelo de la clase y no necesita usar la Tecla [] anotación.
Utilizando la tecla [] no trabajo para mí, pero el uso de un id de propiedad lo hace.
Acabo de añadir esta propiedad en mi clase.
[Key]
, pero una propiedad llamada «id
» también funcionará.El objeto debe contener un campo que será utilizado como el
Primary Key
, si usted tiene un campo denominadoId
entonces esto va por defecto será la clave primaria del objeto a que Entity Framework será un enlace.De lo contrario, se debe agregar el
[Key]
atributo por encima de ese campo que usted quiere utilizar como elPrimary Key
, y usted también tendrá que agregar el espacio de nombresSystem.ComponentModel.DataAnnotations
:https://stackoverflow.com/a/51180941/7003760
La razón por la EF marco símbolo del sistema ‘llave’ es que EF marco de las necesidades de una clave principal en la base de datos. De forma declarativa decir EF de la propiedad que la clave está en añadir un
[Key]
anotación. O, la forma más rápida, añadir unID
de la propiedad. A continuación, el EF marco se llevará aID
como la clave principal de forma predeterminada.partial
clase. Usted puede crear un segundo archivo como unpartial
clase con el mismo nombre, y agregar la propiedad de nuevo con el[Key]
atributo.Además Recuerda, No te olvides de añadir público palabra clave como este
debe utilizar la palabra clave Public como este
Usted no tiene que utilizar la tecla atributo todo el tiempo. Asegúrese de que el archivo de asignación abordado de manera adecuada la clave
y no te olvides de agregar la asignación en el Repositorio del OnModelCreating
Para mí, el modelo estaba bien. Era porque me había 2 diferentes versiones de entity framework. Una versión para el proyecto web y otro para el proyecto común que contiene los modelos.
Yo sólo tenía que consolidar los paquetes de nuget.
Disfrutar!
Todo está bien, pero en mi caso tengo dos clase como esta
Después de la eliminación de la clase alta, funciona muy bien para mí.