2016-08-24 4 views
2

Comment configurer une suppression en cascade vers un projet Code First sans définir les propriétés de navigation sur [Obligatoire] ou non nullable?ASP.NET MVC. Comment ajouter manuellement "cascade delete" à une première relation de code?

par exemple:

class MainClass{ 
    [Key] int id {get;set;} 
    public string name {get;set;} 
    public virtual ICollection<SubItem> subItems {get;set} 
} 

et

Class SubItem{ 
    [Key] int id {get; set;} 
    public string name {get;set;} 
} 

Suppression de la classe principale devrait supprimer tous les SubItems liés

Répondre

1

Pour avoir cascade supprime sur les clés étrangères nullables par un premier code mis en place, Le meilleur moyen d'y parvenir est probablement l'API Fluent.

Ajouter ce code API Courant à votre DBContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<SubItem>() 
      .HasOptional(o => o.MainClass) 
      .WithMany(m => m.subItems) 
      .HasForeignKey(k => k.MainClassId) 
      .WillCascadeOnDelete(true); 
} 

et votre classe sous-élément doit être mis à jour avec ces propriétés:

Class SubItem 
{ 
    [Key] int id {get; set;} 
    public string name {get;set;} 
    public int? MainClassId { get; set;} 
    public virtual MainClass MainClass { get; set; } 
} 

Je crois que si vous supprimez l'élément MainClass les SubItems DOIT être chargé dans le contexte (en utilisant une instruction include lors de l'extraction de l'objet MainClass) à supprimer. Si vous allez dans votre base de données et que vous configurez cette clé étrangère pour que la suppression en cascade soit activée, vous n'aurez pas à charger les SubItems dans le contexte car la base de données prendra en charge la suppression en cascade l'objet MainClass est supprimé.

+0

J'ai essayé cela, mais il semble 1x1, pas de dépendance 1xMany. –

+1

@DanielSantos désolé, j'avais tort. Je l'ai réparé et mis à jour la réponse à la façon dont j'ai fait cela par le passé. – JustSomeDude