Question

Dans un scénario Table-Per-Hierachy, est-il possible de discriminer une liste de valeurs possibles?

par exemplepour les types Color, DarkColor, LightColor

quelque chose comme

 Map<DarkColor>(m => m.Requires("TheColor").HasValue(Red || Blue)
 Map<LightColor>(m => m.Requires("TheColor").HasValue(Yellow || White)

mauvais exemple, mais j'espère que vous comprenez l'image!

Était-ce utile?

La solution

Non, ce n'est pas possible.

La structure d'entité permet uniquement le mappage à l'aide d'une intersection de conditions, et non d'une union de conditions.
Vous pouvez voir cela à la fois dans le designer [1] et dans la syntaxe EDMX [2].
* Le code doit d'abord avoir les mêmes capacités de mappage.

[2] Si vous faites un clic droit sur le fichier edmx et choisissez "Ouvrir avec ..." -> "Sélecteur automatique de l'éditeur (XML)" et essayez de modifier manuellement les conditions de mappage, vous verrez (à partir de l'intellisense) queIl n'y a pas d'option pour entrer "OU" entre les conditions.

Autres conseils

Tout d'abord, je ne sais pas si ce que vous voulez est possible, EF veut prendre soin de la colonne discriminateur, et en fonction du type de classe, il aimerait définir la valeur du discriminateur, dans ce cas, comment estil va définir la valeur, à laquelle possible.Cela ne fait aucune différence lors du chargement à partir de la base de données, mais un peu problématique lorsque vous essayez de le sérialiser dans la base de données.

1- avez-vous essayé de faire plusieurs cartes pour chaque valeur possible :) Vous pourriez avoir une erreur indiquant que DarkColor a déjà été mappé.

2- La deuxième suggestion est d'ajouter un attribut ColorWeight [NotMapped], et de renvoyer sombre ou blanc basé sur theColor, et d'utiliser cette propriété comme champ discriminateur, mais je suppose que le champ Discriminator devrait exister dans le tableau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top