3

J'ai deux tables dans une base de données existante (MSSQL 2008 R2) qui sont liées par une table de liens.Comment mettre en cascade des suppressions dans une table de liens en utilisant l'API EF4 couramment?

Les deux tables sont "Plan" et "Conseils". La table de liens est "PlanTipLinks".

Les plans peuvent avoir de nombreux conseils, et des conseils peuvent être associés à plusieurs plans (c'est-à-dire, une relation plusieurs-à-plusieurs). Dans l'application, je me soucie uniquement de la relation "Plan.Tips". Je n'ai pas besoin de la relation inverse Tip.Plans.

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

J'utilise le code API couramment suivante pour mapper cette relation:

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

Ce créer 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 suppose que je dois lui dire de cascade dans la table PlanTipLinks lorsqu'un plan est supprimé, mais je ne sais pas comment faire cela. Je ne semble pas pouvoir appeler la méthode WillCascadeOnDelete en utilisant les méthodes HasMany/WithMany.

Qu'est-ce qui me manque ici?

Répondre

1

À partir de EF CTP4, il est impossible de directement activer les suppressions en cascade sur les associations plusieurs à plusieurs par API Fluent.

Cela dit, si votre intention est de vous assurer que vous pouvez supprimer le principe (par exemple un plan enregistrement) sans avoir à se soucier de l'enregistrement dépend de la table de liaison (c.-à-PlanTipLinks) alors vous n » Il est nécessaire d'activer les cascades sur la base de données puisque EF Code First se chargera des suppressions en cascade du côté client lorsqu'il s'agit d'associations Many to Many.

Par exemple, lorsque vous supprimez un plan objet, le code premier est assez intelligent pour envoyer d'abord une déclaration de suppression pour se débarrasser de l'enregistrement dépend des PlanTipLinks tableau et après qu'il envoie une autre déclaration de suppression de supprimer l'enregistrement du plan.

Pour plus d'informations, s'il vous plaît jeter un oeil au poste suivant:
EF CTP4 cascade delete on many to many relationship

+1

@dommer, comment ce vous aider réponse, comme vous avez écrit « Le problème est que, lorsque je supprime un plan, je reçois une exception de clé étrangère sur la table PlanTipLinks. "? Cette réponse suggère qu'une exception ne se produirait pas. –