0

J'ai une relation un-à-un entre Service et Lexikon alors que le Service a une clé étrangère à Lexikon. Mon service n'a pas besoin d'un Lexikon alors j'ai rendu le LexikonID nullable. Mais mon Lexikon ne peut exister que s'il est lié à un Service donc j'ai fait la propriété de navigation [requis]. J'utilise Code First pour que EF crée ma base de données.C# - Entity Framework Suppression en cascade Core sur une relation 1-to-one

public class Service 
{ 

    public int ServiceID { get; set; } 

    //Foreignkey 
    public int? LexikonID { get; set; } 

    //Navigation Properties 

    public Lexikon Lexikon { get; set; } 
} 

public class Lexikon 
{ 
    public int LexikonID { get; set; } 

    //Navigation Properties 
    [Required] 
    public SoftwareService SoftwareService { get; set; } 

} 

Je suis en train de supprimer les données automatiquement dans le tableau Lexikon si je supprime mon service mais, malheureusement, je ne sais pas comment faire cela depuis que je suis nouveau à EF.

J'ai essayé ce code dans dbContext:

 modelBuilder.Entity<SoftwareService>() 
       .HasOne(l => l.Lexikon) 
       .WithOne(s => s.SoftwareService) 
       .HasForeignKey<SoftwareService>(l => l.LexikonID) 
       .OnDelete(DeleteBehavior.Cascade); 

mais quand je supprime mon service les données du tableau Lexikon toujours en elle. Par contre quand je supprime le lexikon il va automatiquement supprimer le Service ce qui est sympa mais je veux aussi que ça arrive à mon Lexikon quand je supprime mon Service.

Malheureusement, je ne connais pas la méthode OnDelete et j'espère que quelqu'un pourra m'aider.

Répondre

0

Avez-vous généré la base de données de votre modèle? Vous devez, car EF génère une contrainte ON DELETE CASCADE. Sinon, vous devrez l'ajouter à la main. J'ai écrit un post sur ce problème, pour EF pré-Core, mais il s'applique toujours: https://weblogs.asp.net/ricardoperes/entity-framework-pitfalls-cascade-deletes.

+0

Oui, ma base de données est générée à partir de mon modèle par l'entitéframework –

+0

Dans ce cas, vous devriez avoir la contrainte. Il n'y a rien de plus, vraiment. –

+0

Encore une chose: vous mélangez des attributs avec une configuration de code, cette dernière prend de la prévalence, donc je pense que vous devez indiquer que l'un des points de terminaison est requis. –