Bonjour,
Je suis en train de développer une application web API avec ASP.NET core et entity framework.
J'ai une relation Many to Many entre ma table Client et ma table Contact. En effet, un contact peut appartenir à plusieurs clients et un client peut avoir plusieurs contacts.
Voici le code qui me permet de faire actuellement la relation many to many :
Client.cs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class Client { [Key] public int Id { get; set; } //TODO : à supprimer public virtual List<ClientContact> ClientContacts { get; set; } }
Contact.cs
DBcontext.cs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class Contact { [Key] public int ID { get; set; } //TODO : à supprimer public virtual List<ClientContact> ClientContacts { get; set; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 public class DBContext : DbContext { public DBContext (DbContextOptions<DBContext > options)<br> : base(options){} protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<ClientContact>() .HasKey(t => new { t.ClientId, t.ContactId }); modelBuilder.Entity<ClientContact>() .HasOne(pt => pt.Client) .WithMany(p => p.ClientContacts) .HasForeignKey(pt => pt.ClientId); modelBuilder.Entity<ClientContact>() .HasOne(pt => pt.Contact) .WithMany(t => t.ClientContacts) .HasForeignKey(pt => pt.ContactId); } public DbSet<Client> Clients { get; set; } public DbSet<Contact> Contacts{ get; set; } }
Le problème se trouve au niveau de la suppression d'un contact pour un client donné :
En effet :
Si un contact est associé à un seul client, il faut supprimer le contact ainsi que la ligne de la table ClientContact qui permet de faire le lien entre le client et le contact.
Si un contact est lié à plusieurs clients, il faut juste supprimer la ligne de la table ClientContact sans supprimer le contact.
Auriez vous une idée de comment faire cela ?
Merci par avance pour votre réponse
Partager