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.