2012-10-03 32 views
8

Necesito usar herencia con EF4 y el modelo TPH creado desde DB.
Creé un nuevo proyecto para probar clases simples. No es mi modelo de clases:EF4 y múltiples niveles abstractos

enter image description here

No es mi mesa en SQL SERVER 2008:

VEHICLE 
    ID : int PK 
    Owner : varchar(50) 
    Consumption : float 
    FirstCirculationDate : date 
    Type : varchar(50) 
    Discriminator : varchar(10) 

que añade una condición en mi EDMX en el campo discriminador para diferenciar la Vespa, coches, Entidades de motos y bicicletas.

MotorizadoEl vehículo y el vehículo son abstractos.

Pero cuando compilo, aparece este error:

Error 3032: Problema en fragmentos de mapeo a partir de las líneas 78, 85: EntityTypes EF4InheritanceModel.Scooter, EF4InheritanceModel.Motorbike, EF4InheritanceModel.Car, EF4InheritanceModel. La bicicleta está siendo mapeada a las mismas filas en la tabla Vehículo. Las condiciones de mapeo se pueden usar para distinguir las filas a las que se asignan estos tipos.

Editar:
Para LADISLAV:
lo intento y error por cambio de convertirse en ella para todos mis entidades:

Error 3034: Problema en fragmentos de mapeo a partir de las líneas 72, 86: Una entidad se asigna a> filas diferentes dentro de la misma tabla. Asegúrese de que estos dos fragmentos de mapeo no mapeen dos> grupos de entidades con llaves superpuestas a dos grupos distintos de filas.

Para Henk (con Ladislay sugerencia):
Hay todas las asignaciones de detalles: enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here

¿Qué ocurre?

Gracias

+0

¿Puede publicar algunos de los detalles del mapeo? Mayormente relacionado con el Discriminador. –

+0

Intenta agregar también un valor discriminador para las clases abstractas. –

+0

Gracias, pero no funciona. Ver mi publicación, lo expliqué. Para información, si elimino la propiedad de MotorizedVehicle y Vehicle abstract, es trabajo. Pero necesito que haya resumen. – Cedric

Respuesta

1

EF4 no funciona bien. Puedes hacerlo con un discriminador, pero las clases deben ser no abstractas. Tendrá que usar otro método, como análisis de código o pruebas, para asegurarse de que la clase base nunca sea instanciada por otra cosa que no sea Entity Framework.

O bien, puede actualizar a EF6. No estoy seguro si lo soportará mejor, pero definitivamente maneja mejor las jerarquías de modelo, permitiendo mejores esquemas de base de datos que soporten mejor el modelo.

Cuestiones relacionadas