Skip to main content

Problèmes de many to many avec EF 6 ?

Si vous avez un projet Entity Framwork 6 et un EDMX, il est quelques situations qui peuvent être problématiques. Principalement quand on modifie la structure de la base.

La plupart de problèmes vient du fait que la documentation sur les EDMX est vraiment réduite aujourd’hui (l’EDMX n’est plus à la mode, comme EF6). Il faut donc avoir l’expérience d’EF dans sa globalité pour résoudre un problème.

Dernièrement, je suis tombé sur un problème simple : une relation many to many doit être ajoutée. Dans la base de données, une table a été créée pour faire le lien entre deux autres tables.

À chaque demande de mise à jour de l’EDMX, la liaison many to many ne se faisait pas. À la place, on a une entité qui porte le nom de la table de liaison. Sur EF6, ce n’est pas le comportement attendu. On souhaite voir un lien entre les deux entités et des propriétés de navigation de part et d’autre.

Pour s’en sortir et trouver d’où peut venir ce type de problème, il suffit de connaitre la manière dont EF6 créer les tables quand on lui demande de créer la base de données d’un contexte EF créé avec l’approche Code First.

Dans le cas du many to many, EF en Code First créé une table qui a deux colonnes (une par table à lier, contenant la clé primaire de la table à lier). La clé primaire de cette table est constituée de ces deux colonnes.

Dans mon cas, la table de liaison ne respectait pas cette structure. Pour résoudre le problème, la structure de cette table a donc été modifiée. Lors de la mise à jour de l’EDMX via la base, la table de liaison a été sélectionnée. La liaison est alors valide et plus aucune table de liaison n’est visible.

Moralité

Si la documentation n’est pas disponible, utiliser la méthode qui est bien documentée pour comparer et s’adapter ;)

Jérémy Jeanson

Comments

You have to be logged in to comment this post.

Cookies Cookie Policy

This website uses cookies and similar technologies to allow us to promote our services and enhance your browsing experience. If you continue to use this website you agree to our use of cookies.