// ========================================================================
//
// Copyright (C) 2016-2017 MARC CHEVALDONNE
//                         marc.chevaldonne.free.fr
//
// Module        : Program.cs
// Author        : Marc Chevaldonné
// Creation date : 2016-11-07
//
// ========================================================================

using static System.Console;

namespace ex_042_013_EF_CF_TPT_Inheritance
{
    public class Program
    {
        /// <summary>
        /// L'approche CodeFirst d'Entity Framework vous permet de gérer l'héritage entre types de trois façons différentes :
        /// - héritage TPT (Table per Type) : une table par type (dont le type père) [PAS ENCORE IMPLEMENTE DANS ENTITY FRAMEWORK CORE]
        /// - héritage TPH (Table per Class Hierarchy) : une seule table correspondant au type père mais avec toutes les propriétés (nullables) des types fils
        /// - héritage TPC (Table per Concrete Class) : une table par type concret [PAS ENCORE IMPLEMENTE DANS ENTITY FRAMEWORK CORE]
        /// 
        /// Cet exemple montre comment mettre en oeuvre un héritage de type TPT.
        /// Chaque table correspondant à un type fils est reliée à la table correspondant au type père via une relation one to one.
        /// 
        /// Pour la mettre en oeuvre, il suffit de préciser à Entity Framework (via des annotations de données ou la fluent API) comment mapper les types fils aux tables.
        /// Dans l'exemple suivant, les types fils (Rectangle et Cercle) utilisent une annotation de données ([Table("Rectangles")] et [Table("Cercles")]) qui entrainent l'utilisation
        /// d'un héritage Table Per Type. Sans ces annotations (ou les lignes de code en fluent API équivalente cf. exemples précédents), on aurait un héritage de type TPH.
        /// 
        /// Notez bien que la classe qui dérive de DbContext ne contient qu'un DbSet de Forme.
        /// 
        /// Après avoir exécuté l'exemple, vous pouvez vous rendre dans l'explorateur d'objets SQL Server, et constater qu'Entity Framework a créé trois tables (Formes, Rectangles et Cercles),
        /// avec des relations one to one entre Formes et Rectangles et entre Formes et Cercles.
        /// </summary>
        public static void Main(string[] args)
        {
            WriteLine("TPT Inheritance is not fully implemented yet in Entity Framework Core.");
        }
    }
}
