3 votes

Entity Framework - Discriminer sur plusieurs valeurs

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

Par exemple, pour 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 avez saisi l'image !

1voto

Danny Varod Points 8685

Non, ce n'est pas possible.

Entity framework permet uniquement le mappage en utilisant une intersection de conditions, et non une union de conditions.
Vous pouvez le constater à la fois dans le designer [1] et dans la syntaxe EDMX [2].
* Le premier code doit avoir les mêmes capacités de mise en correspondance.

[2] Si vous cliquez avec le bouton droit de la souris sur le fichier edmx et choisissez "Open With..." (Ouvrir avec...) --> "Automatic Editor Selector (XML)" et essayez d'éditer manuellement les conditions de mappage, vous verrez (à partir de l'intellisense) qu'il n'y a pas d'option pour entrer "OR" entre les conditions.

0voto

hazimdikenli Points 1372

Tout d'abord, je ne suis pas sûr que ce que vous voulez soit possible, EF veut s'occuper de la colonne discriminante, et en fonction du type de classe, il voudrait définir la valeur du discriminant, dans ce cas, comment va-t-il définir la valeur, à quelle valeur possible. Cela ne fait aucune différence lors du chargement depuis la base de données, mais c'est un peu problématique lorsqu'on essaie de le sérialiser vers la base de données.

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

2- La deuxième suggestion est d'ajouter un attribut [NotMapped] ColorWeight, et de renvoyer le noir ou le blanc en fonction de la couleur, et d'utiliser cette propriété comme champ discriminant, mais je suppose que le champ discriminant devrait exister dans la table.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X