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 Hierarchy?
In simple terms "The parent entity is associated with many child entities where the child entities can inherit the data from the parent. Here there is just a table that is subdivided into multiple entities based upon the properties".
Step 1: Create a new web application
Step 2: Entities in DB looks like this:
Step 3: Adding New Entity Data Model Framework
Step 4: Select the tables from DB
Step 5: Entity in Model Browser
Step 6: Add New Entity
Step 7: Make base type of parent entity as abstract
Step 8: Delete the property from parent entity and put it in the new entity
Step 9: Delete the unnecessary properties from the parent entity but make sure to specify up in the conditions during mappings
Step 10: Do the table mappings for the child entities
Step 11: Make nullable properties to false whereever it's required
Step 12: The complete code of WebForm1.aspx looks like this:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="TPTHiearchyInsertApp.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="Insert Data with TPT Hirearchy 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="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="Insert Train Data" OnClick="Button1_Click"
BackColor="Orange" Font-Bold="true" /><br />
<br />
</td>
</tr>
<tr>
<td colspan="2" align="center">
<asp:Button ID="Button2" runat="server" Text="Insert Bus Data" OnClick="Button2_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 13: 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 TPTHiearchyInsertApp
{
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
{
Train objTrain = new Train()
{
TransportCode = TextBox1.Text, TrainInfo = TextBox2.Text };
objEntities.AddToTransport(objTrain);
objEntities.SaveChanges();
Label5.Text = "Train Details Inserted Sucessfully";
Label5.ForeColor = System.Drawing.Color.Green;
TextBox1.Text = string.Empty;
TextBox2.Text = string.Empty;
}
}
protected void Button2_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
{
Bus objBus = new Bus()
{
TransportCode = TextBox1.Text, BusInfo = TextBox2.Text
}
;
objEntities.Transport.AddObject(objBus);
objEntities.SaveChanges();
Label5.Text = "Bus Details Inserted Sucessfully";
Label5.ForeColor = System.Drawing.Color.Green;
TextBox1.Text = string.Empty;
TextBox2.Text = string.Empty;
}
}
#region Instance MembersCompanyEntities objEntities = new CompanyEntities();
#endregion
}
}
Step 14: The output of the application looks like this:
Step 15: The inserted data output of the application looks like this:
Step 16: The data inserted into parent table looks like this:
We hope this article was useful for you.