2011-01-05 15 views
7

Digamos que tiene 2 mesas: Mensaje y SuperMessage¿Puedo mezclar tabla por jerarquía y tabla por tipo en Entity Framework?

y 3 entidades: Mensaje (base (no abstracta)), Comentario (hereda de mensaje) y SuperMessage (hereda de Mensaje)

mensaje no tiene una campo de Tipo de mensaje que se puede nulos que se usa como un discriminador.

  • MessageType = 1 significa que es un mensaje
  • MessageType = 2 significa que es un comentario a
  • MessageType = 3 Y y unirse a la SuperMessage significa que es un SuperMessage

El problema es que no puedo especificar una condición en MessageType de la sección de detalles de asignación de SuperMessage porque no puede ver el campo MessageType y no puedo ignorarlo.

¿Cómo puedo hacer que funcionen uno junto al otro?

ACTUALIZACIÓN Build Error:

Error 3014: Problema en fragmentos de mapeo: La clave externa 'restricción de clave externa 'FK_SuperMessage_inherits_Message' de SuperMessage tabla (ID) al mensaje de mesa (MessageId):' no se está aplicando en el modelo. Se debe crear una relación de asociación o herencia para hacer cumplir esta restricción.

+0

Si simplemente ignora MessageType para SuperMessage y permitir que el Herencia de TPT para entrar en juego, ¿funciona o se obtiene un error? – jeremcc

+0

@jeremcc sí Lo he probado y me sale el error (que acabo de agregar más arriba) – BritishDeveloper

+0

Jugando con un simple ejemplo yo mismo. Te dejaré saber lo que encuentro. – jeremcc

Respuesta

1

He reproducido esto y tengo el mismo error que usted. Por lo que puedo decir, parece que la combinación de estos dos tipos de herencia para una sola tabla base simplemente no es posible. Sin embargo, me encantaría demostrar que estoy equivocado. ;-)

+0

Escuchado por varias personas que este escenario particular no es posible. Así que creo que tienes razón, desafortunadamente;) – BritishDeveloper

+0

Estás equivocado. :-) –

+0

Esta respuesta parece sugerir lo contrario :-) http://stackoverflow.com/a/6035516/910482 – Scottingham

3

Ha intentado añadir un tipo de entidad abstracta intermedia, es decir:

abstract  MessageBase  --> Message table 
non-abstract Message   --> Message table when MessageType == 1 
non-abstract Comment   --> Message table when MessageType == 2 
abstract  SuperMessageBase --> Message table when MessageType == 3 
non-abstract SuperMessage  --> SuperMessage table 

También echa un vistazo a un escenario similar He resuelto: EF: Can I mix TPH and TPT when abstract base and a few concrete types are in TPH-table and other types have their own table?

Cuestiones relacionadas