Bonsoir,
J'ai un soucis de discriminant avec Entity Framework (Core 3.19) en .Net framework 4.8. Il ne fait pas son boulot.
Du code plutôt que des mots, du code :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public abstract MaBase { // Différentes propriétés communes dont public int IdExterieur { get; set; } }
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public MaClasse : MaBase { // D'autres propriétés en plus } public MonObjet : MaBase { // D'autres propriétés différentes }
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public class BusinessContext : DbContext { // Mes 3 DbSet protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<MaBase>() .HasDiscriminator<bool>("Type") .HasValue<MaClasse>(false) .HasValue<MonObjet>(true); modelBuilder.Entity<MaBase>("IdExterieur", "Type").HasAlternateKey(); } }
Ce code compile, s'exécute, je fais la migration et la mise à jour de la base de données et tout est monté correctement avec la clé alternative.
Par contre, aux premières données qui arrivent, quelque chose coince => Mon discriminant ne reste désespérément qu'à une seule valeur : false.
Constat fait parce qu'il essaie d'insérer un clé déjà existante... Alors que s'en n'est pas justement parce que le Type devrait être à true normalement !!!
Si je retire la clé alternative, ça fonctionne parfaitement avec le Type qui suit bien true-false en fonction de l'objet injecté mais j'ai besoin que IdExterieur soit unique pour chaque type (d'où ma clé alternative) et pas tout type confondu.
Dois-je en être réduit à devoir gérer moi-même le discriminant (en faisant sa propriété dans MaBase, en la déclarant en discriminant et en l'initialisant dans le constructeur de chaque objet) ?
Merci pour votre retour... Et bon week-end.
Partager