Monday, 16 March 2015

Table splitting in entity framework

In this tutorial we will learn table splitting in entity Framework. Table Splitting is just opposite of Entity Splitting.
In entity Splitting  Means Split this entity into multiple database table but in Table splitting we split one table into two tables.
Entity Splitting refers to mapping an entity in to two or more tables when the tables have a common key (common column). 
Why we Use Table Splitting in EF : One reason of this question is that when we want to delay of some property means Lazy loading of to load your objects.
How we use Table splitting in EF, we will understand with an example.
Step(1) : First of all create a table with name Student.
For this execute below script in SQL server.
Create table Students
(
     StudentID int primary key identity,
     FirstName nvarchar(50),
     LastName nvarchar(50),
     Gender nvarchar(50),
     Email nvarchar(50),
     Mobile nvarchar(50)
)

Insert into Students values ('Munesh', 'Sharma', 'Male','m@g.com','5555555555')
Insert into Students values ('Rahul', 'Sharma', 'Male','R@g.com','333333333')
Insert into Students values ('Sara', 'vilium', 'Female','S@g.com','111111111')
Insert into Students values ('Mark', 'hash', 'Female','M1@g.com','2222222222')
Insert into Students values ('ABC', 'EFG', 'Male','A@g.com','6666666666')



After execute this script you will see a table in your database With the name Student.
Now go to your application and Right click on solution explorer and add a “ADO.Net Entity Data Modal” and select  database first approach. 




After that click on next and select database connection and select database name and then click on next and select your tables which is created now, And click FINISH
When you click on FINISH you will see one “Student” Entities

Now in this entity we have Mobile and email properties, these properties we are not using everywhere like Firstname , Lastname, Gender properties. If we will load Student entity these all entity will load automatically, So now we  will create 2 entities (Student ) & (StudentContactDetails).
For Getting this there are some steps
(1)        :Right click on the Entity designer and click on “Add entity” .And Set some values here

(a)        : Entity Name = StudentContactDetail
(b)        : Base type = None
(c)         : Entity Set = StudentContactDetail
(d)        : Key Property check Box = checked
(e)        : Property name : StudentId
(f)          : Property type : Int32


(2)        : Now Cut Mobile And Email From Student entity and pest it into StudentContactDetail.
Then entity will look like that

(3)        Again Right click on entity designer and Add a “Association” And fill the Some details

(4)        Now Right click on Association And click on properties , when you will click on property a window will open from there select “ Referential Constraint” and fill Details



(5)        Now right click on StudentContactsDetails entity and click on mapping.


(6)        Right click on solution explorer and add a Webform and Dragdown a gridview and 2 buttons.
<div style="font-family:Arial">
    <asp:Button ID="FullDataWithContactDetail" runat="server" Text="GetStudent Data with contact detail"
        onclick="Button1_Click" />
    <br />
    <asp:Button ID="Button2" runat="server" Text="Get Student Data"
        onclick="Button2_Click" />
    <asp:GridView ID="GridView1" runat="server">
    </asp:GridView>
</div>


(7)        Write below code on this Webform(In code Behind file)
public partial class WebForm1 : System.Web.UI.Page
{
    private DataTable GetStudentData()
    {
        StudentDBContext _studentDBContext = new StudentDBContext();
        List<Student> _students = studentDBContext.Student.ToList();

        DataTable dt = new DataTable();
        DataColumn[] columns = { new DataColumn("StudentID"),
                                 new DataColumn("FirstName"),
                                 new DataColumn("LastName"),
                                 new DataColumn("Gender")};

        dt.Columns.AddRange(columns);

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

            dt.Rows.Add(dr);
        }

        return dt;
    }


private DataTable GetStudentDatawithContactDetails()
    {
       StudentDBContext  _studentDBContext = new StudentDBContext();
        List<Student> _student = _ studentDBContext.Student
            .Include("StudentContactDetail").ToList();

        DataTable dt = new DataTable();
        DataColumn[] columns = { new DataColumn("StudentID"),
                                 new DataColumn("FirstName"),
                                 new DataColumn("LastName"),
                                 new DataColumn("Gender"),
                                 new DataColumn("Email"),
                                 new DataColumn("Mobile")
        dt.Columns.AddRange(columns);

        foreach (Student student in _student)
        {
            DataRow dr = dt.NewRow();
            dr["StudentID"] = student.StudentID;
            dr["FirstName"] = student.FirstName;
            dr["LastName"] = student.LastName;
            dr["Gender"] = student.Gender;
            dr["Email"] = student.StudentContactDetail.Email;
            dr["Mobile"] = student.StudentContactDetail.Mobile;           

            dataTable.Rows.Add(dr);
        }

        return dt;
    }
protected void Button1_Click(object sender, EventArgs e)
    {
        
            GridView1.DataSource = GetStudentDatawithContactDetails ();
       
        GridView1.DataBind();
    }


protected void Button2_Click(object sender, EventArgs e)
    {
        GetStudentData();


     }


(8)        Now Run your application and check your data with contact detail and without contact detail.

Friday, 6 March 2015

Entity splitting with code first approach in entity framework

I explained before that Entity Splitting Means Mapping an entity or change two table into one table when they have same columnname(common key).
We will understand this with an example
Step(1): Create a new web Project
Go to the visual studio and then file and select new Website after that select new Empty web application and give the name for this.
 Step(2) : Add a class
Add a class and give the name for this as “ student.cs”, And write the following  code.
namespace Demo
{
    public class Student
    {
        // These property values will store in Student  Table
        public int StudentId { getset; }
        public string FirstName { getset; }
        public string LastName { getset; }
        public string Gender { getset; }


// These property values will store in StudentContactDetails Table
public string Email { getset; }
public string Mobile { getset; }
    }
}



 Step(3) : Add a another  new class
Add a new class and give the name for this like “StudentDBContext.cs” and write this code.
using System.Data.Entity;
namespace Demo
{
    public class StudentDBContextDbContext
    {
        public DbSet<Student> Students { getset; }
    }
}


Step(4) : Add a new class to the project
Add a new to the project for performing operations, And give the name for  this as “StudentDetails.cs”. and write this code
using System.Collections.Generic;
using System.Linq;
namespace Demo
{
    public class StudentDetails
    {
   StudentDBContext  _ studentDBContext  = new StudentDBContext  ();

        public List<Student> GetStudent()
        {
            return  _studentDBContext .Student.ToList();
        }

        public void InsertStudentinfo(Student  _student)
        {
            _ studentDBContext .Student.Add(_student);
            _ studentDBContext .SaveChanges();
        }

        public void UpdateStudentinfo(Student  _student)
        {
            Students  _student ToUpdate = _studentDBContext.Student
                .SingleOrDefault(x => x.StudentId == _student.StudentId);

            _studentToUpdate .StudentId = _student.StudentId;
            _studentToUpdate .FirstName = _student.FirstName;
            _studentToUpdate .Gender = _student.Gender;
            _studentToUpdate .Email = _student.Email;
            _studentToUpdate .Mobile = _student.Mobile;
            

            _studentDBContext.SaveChanges();
        }

        public void DeleteStudentinfo(Student  _student)
        {
            Student  _ studentToDelete = _studentDBContext.Students
                .SingleOrDefault(x => x.StudentId == _student.StudentId);
            _studentDBContext. Students.Remove(_studentToDelete);
            _ studentDBContext.SaveChanges();
        }
    }
}


Step(5) : Establish Database connection
Now to Web.config file and establish database connection in connection string tag.
<connectionStrings>
  <add name="StudentDBContext"
        connectionString="server=.; database=EntitySplitting; integrated security=SSPI;"
        providerName="System.Data.SqlClient" />
</connectionStrings>


Step(6) : Operation on gridview
Add a WebForm by right click on solution explorer and add these following 3 controls from toolBox.
GridView,  DetailsView, ObjectDataSource
a). Go to the  "Show Smart Tag" option of ObjectDataSource control. And click on Configure Data Source link, When you will click on this link you will see a “business object form” here you select your business object from dropdown in my case it is “ StudentDetails”. And click on next.



(B) : After click on next you will see a screen for “define data Modal” here you give the Methods for Delete ,insert and update.


(C) : After this go to “ smart tag of gridview” and choose datasource as “Object dataSource” and check “ enable editing” and “enable deleting”  checkboxes .


(D): Go to the properties of gridview and  give “StudentID” in DataKeyName  property.
(E): click on “smart tag of Detailview and select datasource and check enable inserting. And go to properties and put “default mode” as insert

(F) now go to event of “detailview” and click on “item inserted” event and write this code.
protected void DetailsView1_ItemInserted(object senderDetailsViewInsertedEventArgse)
{
    GridView1.DataBind();
}



(G). Run the application , and at this time  entity framework Creates one Table i.e Student table. But we want that EF  to create the 2 tables.
a) Students  table which have column  StudentId, FirstName, LastName and Gender
b) StudentContactDetails table which have column   StudentId, Email, Mobile .
(H).  Go to “StudentDBContext.cs” class and override OnModelCreating() to make two different tables for getting this approach write this below code.
OnModelCreating() method is a virtual method present in DbContext class.
public class StudentDBContext : DbContext
{
    public DbSet<Student> Students { getset; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Student>()
        // Specify properties to map to Students  table
        .Map(map =>
        {
            map.Properties(p => new
            {
                p. StudentId,
                p.FirstName,
                p.LastName,
                p.Gender
            });

            map.ToTable("Students");
        })
        // Specify properties to map to StudentContactDetails table
        .Map(map =>
        {
            map.Properties(p => new
            {
                p. StudentId,
                p.Email,
                p.Mobile,
            });

            map.ToTable("StudentContactDetails");
        });

        base.OnModelCreating(modelBuilder);
    }
}


(i). Go to SQL server and delete previous database table which contain only one table .
(J): Run your application and now you will see database with two tables. As Student and StudentContactDetails.







 Now you can do any operation from "update" Delete, and Insert ,these two tables will update properly.

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...