3 votes

Comment supprimer en cascade des données dans une table de liens à l'aide de l'API fluide EF4 ?

J'ai deux tables dans une base de données existante (MSSQL 2008 R2) qui sont reliées par une table de liens.

Les deux tableaux sont "Plan" et "Tips". La table des liens est "PlanTipLinks".

Les plans peuvent avoir de nombreux conseils, et les conseils peuvent être associés à plusieurs plans (c'est-à-dire qu'il s'agit d'une relation many-to-many). Dans l'application, je ne m'intéresse qu'à la relation "Plan.Tips". Je n'ai pas besoin de la relation inverse Tip.Plans.

Les références de la clé étrangère dans la table de liaison ne peuvent pas être nulles.

J'utilise le code API fluide suivant pour mapper cette relation :

modelBuilder.Entity<Plan>()
    .HasMany(p => p.Tips)
    .WithMany()
    .Map("PlanTipLinks", (p, t) =>
        new
        {
            PlanId = p.Id,
            TipId = t.Id
        });

Cela crée les entrées correctes dans le tableau. Le problème est que, lorsque je supprime un plan, j'obtiens une exception de clé étrangère sur la table PlanTipLinks.

Je dois vraisemblablement lui demander de se déplacer en cascade dans la table PlanTipLinks lorsqu'un plan est supprimé, mais je ne sais pas comment procéder. Je ne semble pas être en mesure d'appeler la méthode WillCascadeOnDelete à l'aide des méthodes HasMany/WithMany.

Qu'est-ce que je rate ici ?

1voto

Morteza Manavi Points 20486

Depuis EF CTP4, il n'y a pas de possibilité de directement activer les suppressions en cascade sur les associations Many to Many par l'API Fluent.

Cela étant dit, si votre intention est de vous assurer que vous pouvez supprimer le principe (par exemple, une Plan ) sans avoir à se préoccuper de l'enregistrement dépendant dans la table de liaison (c'est à dire PlanTipLinks ), vous n'avez pas besoin d'activer les cascades dans la base de données puisque EF Code First se charge des suppressions en cascade côté client pour les associations Many to Many.

Par exemple, lorsque vous supprimez un Plan le code first est assez intelligent pour envoyer d'abord une instruction de suppression pour se débarrasser de l'enregistrement dépendant dans l'objet PlanTipLinks et après cela, il enverra une autre déclaration de suppression pour supprimer l'enregistrement du plan.

Pour plus d'informations, veuillez consulter l'article suivant :
La cascade EF CTP4 supprime la relation entre plusieurs personnes.

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