Thursday 9 April 2015

Inheritance in entity framework

In previous tutorials we creates database tables which are based on domain classes. we can design our domain classes using inheritance in EntityFramework. Oops techniques includes "has a" and "is a" relationship whereas SQL based relational has only a "has a" relationships between database tables. SQL database management don't support type inheritance. So Here we will learn How to map with domain class.
There are three different approaches to get an inheritance hierarchy:
Table per Hierarchy (TPH): Inheritance is nothing but it is a hierarchical concept, means where one class is derived from another class. In TPH inheritance one database table stores Full data for all the entities in the inheritance hierarchy Format.
 Table per Type (TPT): This Creates separate table for each domain class or POCO class.
Table per Concrete class (TPC): This create one table for one concrete class, but not for the abstract class. So when you inherit the abstract class in multiple concrete classes then the properties of the abstract class will be part of each table of concrete class.
We Will understand per Hierarchy (TPH) With an example.
Step(1): Go to SqlServer management studio nad execute the following query.
Create Table Student
(
     ID int primary key identity,
     FirstName nvarchar(50),
     LastName nvarchar(50),
     Gender nvarchar(50),
     StudentSchoolName nvarchar(50),
     SchoolStudentclass nvarchar(50),
     StudentCollageName nvarchar(50),
     CollageStudentBranch nvarchar(50)
     Discriminator nvarchar(50)
)


Insert into Student values ('Munesh', 'Sharma', 'Male',null,null,'VIT','IT','CollageStudent')
Insert into Student values ('Rahul', 'Sharma', 'Male','KVM','Seven',null,null,'SchoolStudent')
Insert into Student values ('Sara', 'vilium', 'Female','Aadharsh','Eight',null,null,'SchoolStudent')
Insert into Student values ('Rani', 'hash', 'Female',null,null,'MIT','ECE','CollageStudent')
Insert into Student values ('XYZ', 'ABC', 'Female','Ravat','Tenth',null,null,'SchoolStudent')
Insert into Student values ('Anshuman', 'EFG', 'Male',null,null,'BTC','Mechenical','CollageStudent')




Step(2): Right click on your application and add a new item as “Ado.net entity Data Modal” after click Ok select database first approach.
Give your connection and select “Student” table here you will see only one entity but we want 3 entity entity.

Step(3): Here in this entity Student common information (like . ID,Firstname,Lasrname,Gender) will be abstract class.
And other entity like “Address, mobile” and collage ,branch will inherit this abstract class.
Step(4): To achieve this using EF designer.
(1)  Right click on designer surface and select Add New -> Entity
(2)  At this screen you give your new entity name “Student Address info” and Base type will be you abstract entity  then you cut Address and mobile from Base entity and paste it in new entity, After that your entity will be look like that.


(3)  Again right click on designer surface and do same process for adding new entity and give it name as “ Student Study info”. And paste Collage and branch to this entity.



(4)  At this point you have 3 entity and these 2 new entity will be inherited from Base Student  entity.


(5)  Right click on SchoolStudent and click on table Mapping and there map Schoolstudent Entity to Student Table, And also Give the conditional mapping in which we are using Discriminator  column to determine that it is School student or Collage Student.


(6)  Again same gose to Collagestudent entity  menas map this entity with Student table and give Discriminator  condition.

(7)  Now when we will compile this application it will give error because we are using Discriminator  column both side so delete Discriminator column from Student entity.
(8)  Now finally right click on Student entity and click on properties and Set “Abstract=true. This will make Student  class an abstract class. 
<div style="font-family: Arial">
       <asp:Button ID=" Button1" runat="server" Text="All Student Information"
        onclick="Button1_Click" />
   <asp:Button ID=" Button2" runat="server" Text="Collage Student Information"
        onclick="Button2_Click" />

   <asp:Button ID=" Button3" runat="server" Text="School Student Information"
        onclick="Button3_Click" />

    <asp:GridView ID="GridView1" runat="server">
    </asp:GridView>
</div>


protected void Button1_Click(object sender, EventArgs e)
    {
 GridView1.DataSource = ConvertListToDataTable(
                        studentDBContext.Students.ToList());
                    GridView1.DataBind();


}
protected void Button2_Click(object sender, EventArgs e)
    {
 GridView1.DataSource = studentDBContext.Students
                        .OfType<CollageStudent>().ToList();
                    GridView1.DataBind();


}
protected void Button3_Click(object sender, EventArgs e)
    {
  GridView1.DataSource = studentDBContext.Students
                        .OfType<SchoolStudent>().ToList();
                    GridView1.DataBind();


}


private DataTable ConvertListToDataTable (List<Student> students)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ID");
            dt.Columns.Add("FirstName");
            dt.Columns.Add("LastName");
            dt.Columns.Add("Gender");
            dt.Columns.Add("SchoolStudentName");
            dt.Columns.Add("SchoolStudentClass");
            dt.Columns.Add("CollageStudentName");
            dt.Columns.Add("CollageStudentBranch");
            dt.Columns.Add("Type");

            foreach (Student _student in students)
            {
                DataRow dr = dt.NewRow();
                dr["ID"] = _student.ID;
                dr["FirstName"] = _student.FirstName;
                dr["LastName"] = _student.LastName;
                dr["Gender"] = _student.Gender;

                if (_student is CollageStudent)
                {                     dr["CollageStudentName"] = ((CollageStudent) _student). CollageStudentName;
                    dr["CollageStudentBranch"] = ((CollageStudent) _student). CollageStudentBranch;

                   
                    dr["Type"] = "CollageStudent";
                }
                else
                {
                   dr["SchoolStudentName "] = ((SchoolStudent) _student). SchoolStudentName;
dr["SchoolStudentClass   "] = ((SchoolStudent) _student). SchoolStudentBranch;
                    dr["Type"] = "SchoolStudent";
                }
                dt.Rows.Add(dr);
            }

            return dt;
        }
    }
}



(9)  Now Run your application and  Check your data.

Wednesday 1 April 2015

Self referencing association in entity framework with code first



Step1: Go to your application and Add a class (Student.cs) file to your application.

namespace Entity
{
    public class Student
    {
        public int StudentID { getset; }
        public string StudentName { getset; }
        public int? HODID { getset; }

        public Student HOD { getset; }
    }
}



Step 2: Add another class(StudentDBContext.cs)file to the project.
using System.Data.Entity;
namespace Entity
{
    public class StudentDBContext : DbContext
    {
        public DbSet<Student> Students { getset; }

        protected override void OnModelCreating(DbModelBuilder _model)
        {
           _model.Entity<Student>()
                .HasOptional(c => c.HOD)
                .WithMany()
                .HasForeignKey(c => c.HODID);

            base.OnModelCreating(_model);
        }
    }
}



Step 3: Add the web.config file for database connection string.
<connectionStrings>
  <add name="StudentDBContext"
            connectionString="server=.; database=Entity; integrated security=SSPI;"
            providerName="System.Data.SqlClient" />
</connectionStrings>


Step 4: Add a webform to your application and Drag and drop a GridView control from tool box. 

Step 5: Write the below code.
using System;
using System.Linq;
namespace Demo
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            StudentDBContext studentDBContext = new StudentDBContext();
            GridView1.DataSource = studentDBContext.Students.Select(c => new
            {
                StudentName = c.StudentName,
                HODName = c.HOD == null ?
                    "Principle" : c.HOD.StudentName
            }).ToList();
            GridView1.DataBind();
        }
    }
}



Step 6: Run your application. Entity database and Students table will be created at this time. You see that StudentID is marked as primary key and HODID is marked as foreign key.

Step 7: Insert test data using the following SQL script

Insert into Students values ('Munesh', NULL)
Insert into Students values ('Rahul', NULL)
Insert into Students values ('Micale', NULL)
Insert into Students values ('Tom', NULL)
Insert into Students values ('Ram', NULL)
Insert into Students values ('Lick', NULL)
Insert into Students values ('ABC', NULL)
Go
Update Students Set HODID  = 5 Where StudentName IN ('Ram''Rahul')
Update Students Set HODID  = 3 Where StudentName IN ('Tom','Micale')
Update Students Set HODID  = 5 Where StudentName IN ('Lick')
Update Students Set HODID  = 4 Where StudentName IN ('ABC')
GO



Now Run your application you will see that respective name and others detail will see.

C# program Selection Sorting

Selection sort is a straightforward sorting algorithm. This algorithm search for the smallest number in the elements array and then swap i...