Showing posts with label Types of inheritance in Entity Framework. Show all posts
Showing posts with label Types of inheritance in Entity Framework. Show all posts

Thursday, April 27, 2023

Types of inheritance in Entity Framework #TPH # TPT #TPC #ENTITY #ENTITYFRAMEWORK

 #TPH # TPT #TPC #ENTITY #ENTITYFRAMEWORK

  1. Table-per-Hierarchy (TPH)

    The TPH inheritance states that all entities, in a hierarchy of entities, are mapped to a single table in storage schema. It means, there is only one table in database and different Entity types in Entity model that inherits from a base Entity are mapped to that table.

    Table-per-Hierarchy (TPH)

    C# Implementation Code for TPH

     public class Course
     {
     [Key]
     public int CourseId { get; set; }
     public string Name { get; set; }
     public string Details { get; set; }
     public string Trainer { get; set; }
     }
    
     public class OnlineCourse : Course
     {
     public string URL { get; set; }
     }
    
     public class OfflineCourse : Course
     {
     public string Address { get; set; }
     }
    

    Entity Framework Code First Mapping for TPH

    modelBuilder.Entity<Course>()
     .Map<OnlineCourse >(m => m.Requires("Type").HasValue("OnlineCourse "))
     .Map<OfflineCourse >(m => m.Requires("Type").HasValue("OfflineCourse "));
    


  2. Table-per-Concrete-Type (TPC)

    The TPC inheritance states that each concrete class (a class which can be instantiated) in the hierarchy of entities is mapped to a separate table in storage schema. It means, there is separate table in database to maintain data for each derived entity type.

    Table-per-Concrete-Type (TPC)

    C# Implementation Code for TPC

     public abstract class Course //abstract class
     {
     [Key]
     public int CourseId { get; set; }
     public string Name { get; set; }
     public string Details { get; set; }
     public string Trainer { get; set; }
     }
    
     public class OnlineCourse : Course //concrete class
     {
     public string URL { get; set; }
     }
    
     public class OfflineCourse : Course //concrete class
     {
     public string Address { get; set; }
     }
    

    Entity Framework Code First Mapping for TPC

    modelBuilder.Entity<OnlineCourse >().Map(m =>
    {
     m.MapInheritedProperties();
     m.ToTable("OnlineCourse ");
    });
    
    modelBuilder.Entity<OfflineCourse >().Map(m =>
    {
     m.MapInheritedProperties();
     m.ToTable("OfflineCourse ");
    });
    

    Note

    The TPC inheritance is commonly used to inherit basic features.

  3. Table-per-Type (TPT)

    The TPT inheritance states that each entity in the hierarchy of entities is mapped to a separate table in storage schema. It means, there is separate table in database to maintain data for each Entity Type.

    Table-per-Type (TPT)

    C# Implementation Code for TPT

     public class Course
     {
     [Key]
     public int CourseId { get; set; }
     public string Name { get; set; }
     public string Details { get; set; }
     public string Trainer { get; set; }
     }
    
     public class OnlineCourse : Course
     {
     public string URL { get; set; }
     }
    
     public class OfflineCourse : Course
     {
     public string Address { get; set; }
     }
    

    Entity Framework Code First Mapping for TPT

    modelBuilder.Entity<Course>().ToTable("Course");
    modelBuilder.Entity<OnlineCourse >().ToTable("OnlineCourse ");
    modelBuilder.Entity<OfflineCourse >().ToTable("OfflineCourse ");

Mastering Angular Reactive Forms: Part 1 - Building Dynamic and Interactive Forms

  #AngularReactiveForms #AngularForms #ReactiveFormsTutorial #AngularTutorial #AngularFormsPart1 #AngularFormValidation #AngularFormSu...