Entity Framework, Héritage et Discriminant
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:
1 2 3 4 5
| public abstract MaBase
{
// Différentes propriétés communes dont
public int IdExterieur { get; set; }
} |
Code:
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:
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.