Héritage en Entity Framework Core

Vous aimerez aussi...

2 réponses

  1. Yann dit :

    Bonjour,
    Article très intéressant pour ceux qui ne connaisse pas bien mais j’aimerais l’inverse, en parcourant la liste des dbset, y a-t-il un discriminateur et qui est ce discriminateur ?
    A moins qu’il y ai un moyen de gérer la situation suivante :
    public class Contract
    {
    public int Id { get; set; }
    public int ExternalID { get; set; }
    }

    public class TvContract : Contract
    {
    public string Bundle { get; set; }
    }

    public class MobileContract : Contract
    {
    public string PhoneNumber { get; set; }
    }

    public class AppDataContext : DbContext
    {
    public DbSet Contracts { get; set;}
    public DbSet MobileContracts { get; set;}
    public DbSet TvContracts { get; set;}
    }

    public class AppDataContext : DbContext
    {
    public DbSet Contracts { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
    modelBuilder.Entity()
    .HasDiscriminator(« contract_type »)
    .HasValue(« mobile_contract »)
    .HasValue(« tv_contract »);

    modelBuilder.Entity().HasAlternateKey(o => o.ExternalID);

    }
    }

    J’ai un message d’erreur :
    System.InvalidOperationException: A key cannot be configured on ‘MobileContract’ because it is a derived type. The key must be configured on the root type ‘Contract’. If you did not intend for ‘Contract’ to be included in the model, ensure that it is not included in a DbSet property on your context, referenced in a configuration call to ModelBuilder, or referenced from a navigation property on a type that is included in the model.

    J’aimerai pouvoir faire en sorte que le discriminant soit récupéré (par réflexion j’imagine) pour l’ajouter de façon générique car je n’ai pas qu’un seul héritage dans mon modèle et j’aimerais ne pas avoir à faire des cas particulier.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.