2012-02-18 26 views
5

Quiero mostrar la información del cliente. Luego creé algunas clases; Cliente, entrega, pedido, línea de pedido, producto y alquilerDB. rentalDB class establece 5 DbSet de producto, cliente, orden, línea de pedido y entrega. Cuando hago UserController con vista de lista, no es posible mostrar la información de los clientes, y se tarda errores:ASP.NET MVC 3 EntityType no tiene una clave definida

One or more validation errors were detected during model generation: 
System.Data.Edm.EdmEntityType: : EntityType 'OrderLine' has no key defined. Define the key for this EntityType. 
System.Data.Edm.EdmEntityType: : EntityType 'Delivery' has no key defined. Define the key for this EntityType. 
System.Data.Edm.EdmEntitySet: EntityType: EntitySet �OrderLine� is based on type �OrderLine� that has no keys defined. 
System.Data.Edm.EdmEntitySet: EntityType: EntitySet �Delivery� is based on type �Delivery� that has no keys defined. 

No sé por qué estas entidades requieren que la tecla? No tengo idea de este error ... ¿Podría ayudarme?

--UserController.cs--

namespace MvcApplication2.Controllers 
{ 
public class UserController : Controller 
    { 
    // 
    // GET: /User/ 
    rentalDB _db = new rentalDB(); 

    public ActionResult Index() 
    { 
     var model = _db.Customer; 
     return View(model); 
    } 
    } 
} 

--Delivery.cs en modelos folder--

namespace MvcApplication2.Models 
{ 
    public class Delivery 
    { 
    public int trackId { get; set; } 
    public String address { get; set; } 
    public String postCode { get; set; } 
    public decimal deliveryPrice { get; set; } 
    public DateTime deliveryDate { get; set; } 
    public DateTime returnDate { get; set; } 
    } 
} 

--OrderLine.cs en modelos folder--

namespace MvcApplication2.Models 
{ 
    public class OrderLine 
    { 
    public int basketId { get; set; } 
    public int productId { get; set; } 
    public int quantity { get; set; } 
    } 
} 

Respuesta

17

Para utilizar el marco de entidad, cada entidad necesita una clave. Así es como EF sigue los objetos en su caché, publica las actualizaciones en el almacén de datos subyacente y vincula los objetos relacionados entre sí.

saluda objetos ya tienen las llaves, sólo tiene que decir la EF sobre ellos:

namespace MvcApplication2.Models 
{ 
    public class Delivery 
    { 
    [Key] public int trackId { get; set; } 
    public String address { get; set; } 
    public String postCode { get; set; } 
    public decimal deliveryPrice { get; set; } 
    public DateTime deliveryDate { get; set; } 
    public DateTime returnDate { get; set; } 
    } 
} 
+0

Esto funcionó para mí en un caso especial. Agregué un controlador después de escribir el código para el modelo y no obtuve el error. En ese momento me di cuenta de que el modelo no era lo que quería, lo que significaba que todas las vistas generadas estaban muy mal, así que eliminé el controlador/vistas. Luego, cuando arreglé el modelo y agregué el controlador, apareció el error. Después de perder el tiempo durante una hora, agregué la [Clave] y funcionó. Tal vez visual studio Mvc rareza o caché, no sé ... – isitdanny

0

Cuando se utiliza un ORM (mapeador objeto-relacional) framework como marco NHibernate o Entidad que le ayuda a asignar una relacional base de datos a un modelo de objeto necesita algo que le permita establecer una relación significativa entre sus objetos en la memoria y filas de datos en su base de datos y esa cosa es una clave (id como lo llama NHibernate) y normalmente esa es la forma natural en que RDBMS rastrea registros usando una clave primaria (normalmente usa la clave principal de DB como la clave de su objeto) Cuando comprueba si dos objetos son iguales usando == operador está comprobando que esos objetos tienen la misma referencia (o dirección en la memoria). Este tipo de igualdad no es muy útil cuando está usando un ORM. Puede cargar múltiples instancias de un registro en la memoria con diferentes referencias, de modo que es imposible verificar la igualdad de los objetos por sus referencias. Ahí es cuando se compara la igualdad por valor. el juego y las llaves tienen el papel principal en esta obra.

Cuestiones relacionadas