0

Je souhaite créer une table de relations utilisateur dans ASP.NET Core et rencontrer certains problèmes. Si je dois désactiver la suppression en cascade à cause de cela, comment puis-je empêcher les orphelins?Création d'une table de relations utilisateur

erreur:

Introducing FOREIGN KEY constraint 'FK_UserRelationships_AspNetUsers_User2Id' on table 'UserRelationships' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. 

ApplicationDbContext.cs:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) 
     : base(options) 
    { 
    } 

    protected override void OnModelCreating(ModelBuilder builder) 
    { 
     base.OnModelCreating(builder); 
     builder.Entity<UserRelationship>().HasKey(x => new { x.User1Id, x.User2Id }); 
    } 

    public DbSet<UserRelationship> UserRelationships { get; set; } 
} 

Mon modèle actuel:

public class UserRelationship 
{ 
    public byte RelationshipType { get; set; } 
    public ApplicationUser User1 { get; set; } 
    public string User1Id { get; set; } 
    public ApplicationUser User2 { get; set; } 
    public string User2Id { get; set; } 
} 

Répondre

0

Vous avez vos ApplicationUsers au besoin afin EF cascade la supprimer par défaut deux fois à la même classe (voir here).

Vous devez lui dire de ne pas:

builder.Entity<UserRelationship>().HasOne(ur => ur.User1).WithMany().HasForeignKey(ur => ur.UserId1).WillCascadeOnDelete(false); 

builder.Entity<UserRelationship>().HasOne(ur => ur.User2).WithMany().HasForeignKey(ur => ur.UserId2).WillCascadeOnDelete(false); 
+0

Il n'y a pas une méthode nommée HasRequired(). Est-ce que je manque quelque chose? – Zack

+0

Si je désactive la suppression en cascade, comment puis-je empêcher les orphelins? – Zack

+0

Désolé, je ne savais pas que c'était EF Core. Voir [ici] (https://docs.microsoft.com/en-us/ef/core/modeling/relationships). Lorsque vous supprimez un UserRelationship, je suppose que vous ne voulez pas supprimer les Utilisateurs. Si vous supprimez un utilisateur, vous pouvez vérifier les enregistrements de relations existants et les supprimer en premier (voir [ici] (https://stackoverflow.com/questions/16565078/delete-parent-with-children-in-one-to-many -relation)). –