2017-08-14 2 views
0

J'essaie de migrer les modèles ci-dessous et l'héritage n'est pas reflété dans le script de migration généré. Qu'est-ce que je rate? J'utilise actuellement PM pour gérer la génération de script de migration avec un simple Add-migration suivie de mise à jour Base de données en VS2017 ciblant SQL 2016.EF Les propriétés héritées du noyau ne sont pas reflétées dans le script de migration

public class Facility 
    { 
     [Key] 
     public int ID { get; set; } 
     public bool Deleted { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 
     public byte? Image { get; set; } 

     public List<LocationFacility> LocationFacilities { get; set; } 
    } 

    public class Helipad : Facility 
    { 
     public decimal Size { get; set; } 
     public decimal MaximumWeight {get; set;} 
    } 
+0

Pouvez-vous partager le fichier de migration généré? Comment incluez-vous le type 'Helipad' dans votre modèle? – Smit

+0

J'ai fait un petit changement ce matin et ajouté un champ supplémentaire. Le script de migration est vide. Je n'ai rien fait de plus que ce qui précède, je ne pensais pas avoir besoin de lire le MS Docs. – K7Buoy

+0

L'ajout du modèle Helipad dérivé de Facility à ApplicationDbContext a généré manuellement le script attendu avec l'héritage TPH. Je m'attendais à ce qu'il soit ajouté pendant Add-Migration. – K7Buoy

Répondre

1

Basé sur Documentation of EF Core,

Afin d'avoir certain type de être inclus dans le modèle par convention, soit vous avez besoin de la propriété DbSet ou de la propriété Navigation pointant vers le type, soit vous le référenciez dans OnModelCreating. Il existe une propriété de navigation sur la classe Facility. Peut-être qu'une navigation inverse pointant vers Facility sur un type inclus dans le modèle a entraîné l'inclusion de Facility. Mais Helipad n'a été ajouté que si vous y faites explicitement référence. EF Core configure TPH pour les types qui sont inclus dans le modèle & ont une hiérarchie. Mais il n'essaie pas de trouver des types dans la hiérarchie s'il n'est pas inclus. Pour résoudre ce problème, le plus simple consiste à ajouter la propriété DbSet au type que vous souhaitez inclure dans votre classe Dived de DbContext. Si vous ne souhaitez pas exposer une propriété DbSet pour le type, vous pouvez écrire dans votre méthode OnModelCreating.

modelBuilder.Entity<Helipad>(); 

Espérons que cela résout le problème.