Table Per Type (TPT) Inheritance Update Data Via EDM Framework

Introduction

 

Today, in this article let's play around with an interesting and very useful concept in entity framework.

Question: What is Table Per Type Inheritance?

In simple terms "The parent entity is associated with many child entities where the child entities can inherit the data from the parent. Here the primary key of the parent entity is shared with the child entity that maintains a 1-1 relationship".

Step 1: Create a new web application

 

Output1.jpg
 

 Step 2: Entities in DB looks like this:

 

Output2.png
 

 

Step 3: Adding New Entity Data Model Framework

 

Output3.jpg
 

 

Step 4: Select the tables from DB

 

Output4.png
 

 

Step 5: Entity in Model Browser

 

Output5.png
 

 

Step 6: Delete association links between entities

 

Output6.png
 

 

Step 7: Select the base types

 

Output7.png
 

 

Output8.png
 

 

Step 8: New inheritance associations established

 

Output9.png
 

 

Step 9: Delete the child table or entities Ids that will inherit from the parent entity

 

Output10.png
 

 

Step 10: The complete code of WebForm1.aspx looks like this:

 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="TPTInhertanceUpdateApp.WebForm1" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head id="Head1" runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <center>

            <table>

                <tr>

                    <td>

                        <asp:Label ID="Label1" runat="server" Text="Update Data with TPT Inheritance via EDM Framework"

                            Font-Bold="true"></asp:Label>

                    </td>

                </tr>

            </table>

            <br />

            <br />

            <table>

                <tr>

                    <td>

                        <asp:Label ID="Label2" runat="server" Text="Please Enter Transport Info: " ForeColor="Brown"

                            Font-Bold="true" Font-Italic="true"></asp:Label>

                    </td>

                    <td>

                        <asp:TextBox ID="TextBox1" runat="server" Width="117px"></asp:TextBox>

                    </td>

                </tr>

                <tr>

                    <td>

                        <asp:Label ID="Label3" runat="server" Text="Please Select Transport Mode: " ForeColor="Brown"

                            Font-Bold="true" Font-Italic="true"></asp:Label>

                    </td>

                    <td>

                        <asp:DropDownList ID="DropDownList1" runat="server" Width="117px">

                            <asp:ListItem Text="Train" Value="0"></asp:ListItem>

                            <asp:ListItem Text="Bus" Value="1"></asp:ListItem>

                        </asp:DropDownList>

                    </td>

                </tr>

                <tr>

                    <td>

                        <asp:Label ID="Label4" runat="server" Text="Please Enter Transport Code: " ForeColor="Brown"

                            Font-Bold="true" Font-Italic="true"></asp:Label>

                    </td>

                    <td>

                        <asp:TextBox ID="TextBox2" runat="server" Width="117px"></asp:TextBox>

                    </td>

                </tr>

                <tr>

                    <td colspan="2" align="center">

                        <asp:Button ID="Button1" runat="server" Text="Update Data" OnClick="Button1_Click"

                            BackColor="Orange" Font-Bold="true" /><br />

                        <br />

                    </td>

                </tr>

            </table>

            <br />

            <br />

            <table>

                <tr>

                    <td colspan="3">

                        <asp:Label ID="Label5" runat="server" Font-Bold="true"></asp:Label>

                    </td>

                </tr>

            </table>

        </center>

    </div>

    </form>

</body>

</html>

 

Step 11: The complete code of WebForm1.aspx.cs looks like this:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;namespace TPTInhertanceUpdateApp

{

    public partial class WebForm1 : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

        }

        protected void Button1_Click(object sender, EventArgs e)

        {

            if (string.IsNullOrEmpty(TextBox1.Text) || string.IsNullOrEmpty(TextBox2.Text))

            {

                Label5.Text = "Please Enter Some Values";

                Label5.ForeColor = System.Drawing.Color.Red;

            }

            else

            {

                switch (int.Parse(DropDownList1.SelectedValue))

                {

                    case 0:Train objTrain = objEntities.Transport.OfType<Train>().SingleOrDefault(r => r.TransportCode.Equals(TextBox2.Text));

                        objTrain.TransportMode = DropDownList1.SelectedItem.Text;

                        objTrain.TrainInfo = TextBox1.Text;

                        objEntities.SaveChanges();

                        Label5.Text = "Train Details Updated Sucessfully";

                        Label5.ForeColor = System.Drawing.Color.Green;

                        TextBox1.Text = string.Empty;

                        TextBox2.Text = string.Empty;

                        break

                            ;

                    case 1:Bus objBus = objEntities.Transport.OfType<Bus>().SingleOrDefault(r => r.TransportCode.Equals(TextBox2.Text));

                        objBus.TransportMode = DropDownList1.SelectedItem.Text;

                        objBus.BusInfo = TextBox1.Text;

                        objEntities.SaveChanges();

                        Label5.Text = "Bus Details Updated Sucessfully";

                        Label5.ForeColor = System.Drawing.Color.Green;

                        TextBox1.Text = string.Empty;

                        TextBox2.Text = string.Empty;break;

                }

            }

        }

        #region Instance MembersCompanyEntities objEntities = new CompanyEntities();

        #endregion

    }

}

 

Step 12: The output of the application looks like this:

 

Output11.png
 

 

Step 13: The updated data output of the application looks like this:

 

Output12.png
 

 

Step 14: The data updated in child entity output of the application looks like this:

 

Output13.png
 

I hope this article was useful for you.