7

Dire que j'ai 2 tables: message et SuperMessagePuis-je mélanger Table par hiérarchie et Table par type dans Entity Framework?

et 3 entités: Message (base (non abstraite)), Commentaire (message) hérite de et SuperMessage (hérite de message)

message a non champ MessageType nullable qui est utilisé comme discriminateur.

  • MessageType = 1 signifie qu'il est un message
  • MessageType = 2 signifie qu'il est un commentaire
  • MessageType = 3 ET et rejoindre le SuperMessage signifie qu'il est un SuperMessage

Le problème est que je ne peux pas spécifier une condition sur MessageType de la section Détails de mappage de SuperMessage car il ne peut pas voir le champ MessageType et je ne peux pas l'ignorer.

Comment puis-je les faire fonctionner côte à côte?

MISE À JOUR Construire Erreur:

Erreur 3014: Problème de fragments de cartographie: La clé étrangère 'contrainte de clé étrangère 'FK_SuperMessage_inherits_Message' de la table SuperMessage (ID) à la table Message (MessageId):' est pas appliquée dans le modèle. Une relation d'association ou d'héritage doit être créée pour appliquer cette contrainte.

+0

Si vous ignorez simplement MessageType pour SuperMessage et permettre à la L'héritage TPT à lancer, fonctionne-t-il ou obtenez-vous une erreur? – jeremcc

+0

@jeremcc oui je l'ai essayé et j'obtiens l'erreur (que je viens d'ajouter ci-dessus) – BritishDeveloper

+0

Jouer avec un exemple simple moi-même. Je vais vous laisser savoir ce que je trouve. – jeremcc

Répondre

1

Je l'ai reproduit et j'ai eu la même erreur que vous. Autant que je sache, il semble que combiner ces deux types d'héritage pour une seule table de base n'est tout simplement pas possible. J'adorerais avoir tort, cependant. ;-)

+0

Entendu de plusieurs personnes que ce scénario particulier n'est pas possible. Donc, je pense que vous avez raison - malheureusement;) – BritishDeveloper

+0

Vous avez tort. :-) –

+0

Cette réponse semble indiquer le contraire :-) http://stackoverflow.com/a/6035516/910482 – Scottingham

3

Avez-vous essayé d'ajouter un type d'entité abstraite intermédiaire, à savoir:

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 

Consultez également un scénario similaire, je résolu: 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?

Questions connexes