Bonjour,
J'utilise VS2019, Framework 4.8, C# 8.0 et Entity Framework Core 3.1.3
J'ai la nécessité de nommer de nom de colonne qui sont des clés extérieures pour une table d'association.
La situation présentée n'est qu'un résumé de la situation réelle mais permet de se concentrer sur l'essentiel
Toutes mes classes de base héritent de celle-ci :
2 entités de base
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public abstract partial class Identifier { [Key] public int ID { get; set; } }
1 table d'association N-N entre les 2 entités de base
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public class MaClasse : Identifier { // Autres propriétés public virtual ICollection<MaClasseMonAutreClasseLink> MaClasseMonAutreClasseLinks { get; set; } = new HashSet<MaClasseMonAutreClasseLink>(); } public class MonAutreClasse : Identifier { // Autres propriétés public virtual ICollection<MaClasseMonAutreClasseLink> MaClasseMonAutreClasseLinks { get; set; } = new HashSet<MaClasseMonAutreClasseLink>(); }
Pour une raison que je ne souhaite pas développer ici pour rester concentré sur mon problème, considérez qu'il n'est pas possible de changer les noms dans mon association.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public class MaClasseMonAutreClasseLink { // Autres propriétés public int Identifier1ID { get; set; } public MaClasse MonEntite1 { get; set; } public int Identifier2ID { get; set; } public MonAutreClasse MonEntite2 { get; set; } }
Du coup, je fais configure mes liens et renommage pour ma base de données comme ceci :
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
26
27
28
29
30
31
32
33
34 public class MaClasseMonAutreClasseLinkConfiguration : IEntityTypeConfiguration<MaClasseMonAutreClasseLink> { public void Configure(EntityTypeBuilder<MaClasseMonAutreClasseLink> builder) { builder.HasKey(o => new { o.Identifier1ID, o.Identifier2ID }); builder.Property("Identifier1ID").HasColumnName("MaClasseID"); builder.Property("Identifier2ID").HasColumnName("MonAutreClassID"); builder.HasOne("Identifier1") .WithMany() .HasForeignKey("Identifier1ID") .OnDelete(DeleteBehavior.Restrict); builder.HasOne("Identifier2") .WithMany() .HasForeignKey("Identifier2ID") .OnDelete(DeleteBehavior.Restrict); //Idem //builder // .HasOne(o => o.Identifier1) // .WithMany(o => o.RuleRuleLinkUsedByRules) // .HasForeignKey(o => o.Identifier1ID); //builder // .HasOne(o => o.Identifier2) // .WithMany(o => o.RuleRuleLinkUsingRules) // .HasForeignKey(o => o.Identifier2ID); //base.AddNames(builder); } }
Partager