View
61
Download
3
Embed Size (px)
Citation preview
iFour Consultancy
Entity Framework
Entity FrameworkEntity Framework ApproachesCode FirstDatabase FirstModel FirstEntity RelationshipsOne-To-One RelationshipOne-To-Many RelationshipMany-to-Many RelationshipRepository Pattern in MVCCREATING REPOSITORYHow to use Repository?
INDEX
http://www.ifourtechnolab.com/
C# Software Development Companies India
Writing and managing ADO.NET code for data access is a tedious and monotonous job. Microsoft has provided an ORM framework called "Entity Framework" to automate database related activities for application
Object/Relational Mapping (ORM) framework that enables to work with relational data as domain-specific objects, eliminating the need for most of the data access plumbing code that developers usually need to write
Using the Entity Framework, developers issue queries using LINQ, then retrieve and manipulate data as strongly typed objects
The Entity Framework's ORM implementation provides services like change tracking, identity resolution, lazy loading, and query translation
Entity Framework
http://www.ifourtechnolab.com/
C# Software Development Companies India
It is a mature ORM from Microsoft and can be used with a wide variety of databases There are three approaches to modeling entities using Entity Framework:
Code FirstDatabase FirstModel First
Entity Framework Approaches
http://www.ifourtechnolab.com/
C# Software Development Companies India
This helps to create the entities in your application by focusing on the domain requirements
Once entities have been defined and the configurations specified, create the database It gives more control over code - Don't need to work with auto generated code anymore If domain classes are ready then create database from the domain classes
Code First
http://www.ifourtechnolab.com/
C# Software Development Companies India
The downside to this approach is that any changes to the underlying database schema would be lost; in this approach code defines and creates the database
This approach allows to use Entity Framework and define the entity model sans the designer or XML files
Use the POCO (Plain Old CLR Objects) approach to define the model and generate database In this approach, create the entity classes. Here's an example; a typical entity class is given below:
public class Product { public int ProductId { get; set; } public string ProductName { get; set; } public float Price { get; set; } }
Code First (Cont.)
http://www.ifourtechnolab.com/
C# Software Development Companies India
Next, define a custom data context by extending the DbContext class as shown below:public class IDGContext : DbContext
{ public DbSet<Product> Products { get; set; } }
Lastly, specify the connection string in the configuration file
Code First (Cont.)
http://www.ifourtechnolab.com/
C# Software Development Companies India
Use the Database First approach if the database is already designed and is ready In this approach, the Entity Data Model (EDM) is created from the underlying database As an example, use the database first approach when generating the edmx files in the
Visual Studio IDE from the database Manual changes to the database is possible easily and always update the EDM if need be
(for example, if the schema of the underlying database changes) To do this, simply update the EDM from the database in the Visual Studio IDE
Database First
http://www.ifourtechnolab.com/
C# Software Development Companies India
In the Model First approach create the EDM first, then generate the database from it Create an empty EDM using the Entity Data Model Wizard in Visual Studio, define the
entities and their relationships in Visual Studio, then generate the database from this defined model
Create entities and define their relationships and associations in the designer in Visual Studio
Specify the Key property and the data types for the properties for entities using the designer. Use partial classes to implement additional features in entities
Model First
http://www.ifourtechnolab.com/
C# Software Development Companies India
In the Code First approach, in the Model First approach manual changes to the database would be lost as the model defines the database
Model First (Cont.)
http://www.ifourtechnolab.com/
C# Software Development Companies India
Entity framework supports three types of relationships, same as database:One to OneOne to ManyMany to Many
Entity Relationships
http://www.ifourtechnolab.com/
C# Software Development Companies India
As per relationship figure, Student and StudentAddress have a One-to-One relationship (zero or one)
A student can have only one or zero address. Entity framework adds Student navigation property into StudentAddress entity and StudentAddress navigation entity into Student entity
Also, StudentAddress entity has StudentId property as PrimaryKey which makes it a One-to-One relationship Student entity class includes StudentAddress navigation property and StudentAddress
includes Student navigation property with foreign key property StudentId. This way EF handles one-to-one relationship between entities
One-To-One Relationship
http://www.ifourtechnolab.com/
C# Software Development Companies India
Example:public partial class Student{
public Student(){
this.Courses = new HashSet<Course>(); } public int StudentID { get; set; } public string StudentName { get; set; } public Nullable<int> StandardId { get; set; } public byte[] RowVersion { get; set; } public virtual Standard Standard { get; set; } public virtual StudentAddress StudentAddress { get; set; } public virtual ICollection<Course> Courses { get; set; }
}
One-To-One Relationship (Cont.)
http://www.ifourtechnolab.com/
C# Software Development Companies India
public partial class StudentAddress{
public int StudentID { get; set; } public string Address1 { get; set; } public string Address2 { get; set; } public string City { get; set; } public string State { get; set; } public virtual Student Student { get; set; }
}
One-To-One Relationship (Cont.)
http://www.ifourtechnolab.com/
C# Software Development Companies India
The Standard and Teacher entities have a One-to-Many relationship marked by multiplicity where 1 is for One and * is for many, this means that Standard can have many Teachers whereas Teacher can associate with only one Standard
To represent this, The Standard entity has the collection navigation property Teachers (please notice that it's plural), which indicates that one Standard can have a collection of Teachers (many teachers)
And Teacher entity has a Standard navigation property (Not a Collection) which indicates that Teacher is associated with one Standard
Also, it contains StandardId foreign key (StandardId is a PK in Standard entity). This makes it One-to-Many relationship
One-To-Many Relationship
http://www.ifourtechnolab.com/
C# Software Development Companies India
Example:public partial class Standard{
public Standard() { this.Students = new HashSet<Student>(); this.Teachers = new HashSet<Teacher>(); } public int StandardId { get; set; } public string StandardName { get; set; } public string Description { get; set; } public virtual ICollection<Student> Students { get; set; } public virtual ICollection<Teacher> Teachers { get; set; }
}
One-To-Many Relationship (Cont.)
http://www.ifourtechnolab.com/
C# Software Development Companies India
public partial class Teacher{
public Teacher() { this.Courses = new HashSet<Course>(); } public int TeacherId { get; set; } public string TeacherName { get; set; } public Nullable<int> StandardId { get; set; } public Nullable<int> TeacherType { get; set; } public virtual ICollection<Course> Courses { get; set; } public virtual Standard Standard { get; set; }
}
One-To-Many Relationship (Cont.)
http://www.ifourtechnolab.com/
C# Software Development Companies India
Student and Course have Many-to-Many relationships marked by * multiplicity. It means one Student can enroll for many Courses and also, one Course can be be taught to many Students
The database design includes StudentCourse joining table which includes the primary key of both the tables (Student and Course table)
Entity Framework represents many-to-many relationships by not having entityset for the joining table in CSDL, instead it manages this through mapping
Many-to-Many Relationship
http://www.ifourtechnolab.com/
C# Software Development Companies India
Example:public partial class Student{
public Student() { this.Courses = new HashSet<Course>(); } public int StudentID { get; set; } public string StudentName { get; set; } public Nullable<int> StandardId { get; set; } public byte[] RowVersion { get; set; } public virtual Standard Standard { get; set; } public virtual StudentAddress StudentAddress { get; set; } public virtual ICollection<Course> Courses { get; set; }
}
Many-To-Many Relationship (Cont.)
http://www.ifourtechnolab.com/
C# Software Development Companies India
public partial class Course{
public Course() { this.Students = new HashSet<Student>(); } public int CourseId { get; set; } public string CourseName { get; set; } public System.Data.Entity.Spatial.DbGeography Location { get; set; } public Nullable<int> TeacherId { get; set; } public virtual Teacher Teacher { get; set; } public virtual ICollection<Student> Students { get; set; }
}
Many-To-Many Relationship (Cont.)
http://www.ifourtechnolab.com/
C# Software Development Companies India
The Repository pattern is intended to create an abstraction layer between the data access layer and the business logic layer of an application
Data access pattern that prompts a more loosely coupled approach to data access Create the data access logic in a separate class, or set of classes, called a repository, with the
responsibility of persisting the application's business model. MVC controllers interact with repositories to load and persist an application business model. By taking
advantage of dependency injection (DI), repositories can be injected into a controller's constructor. Benefits :
Centralizes the data logic or Web service access logic Reduce redundancy of code Faster development Provides a flexible architecture that can be adapted as the overall design of the application evolves
Repository Pattern in MVC
http://www.ifourtechnolab.com/
C# Software Development Companies India
Step 1: Open up our existing MVC application in Visual Studio, that we created in the third part to interact with database with the help of Entity Framework
Step 2: Create a folder named Repository and add an Interface to that folder named IEmployeeRepository, this interface we derive from IDisposable type of interface. We’ll declare methods for CRUD operations on User entity class over here, choose the names of the method as per choice, but those should be easy to understand and follow
CREATING REPOSITORY
http://www.ifourtechnolab.com/
C# Software Development Companies India
Step 3: Extract a class from that interface and call it EmployeeRepository. This EmployeeRepository class will implement all the methods of that interface, but with the help of Entity Framework.
Now here comes the use of our DBContext class MVCEntities, we already have this class in our existing solution, so we don’t have to touch this class, simply, write our business logic in the interface methods implemented in EmployeeRepository class:
CREATING REPOSITORY
http://www.ifourtechnolab.com/
C# Software Development Companies India
CREATING REPOSITORY
http://www.ifourtechnolab.com/
C# Software Development Companies India
How to use Repository?
Step 4: Go to the controller, declare the IEmployeeRepository reference, and in the constructor initialize the object with EmployeeRepository class, passing DBContext(RepositoryContext) to the constructor as parameter we defined in EmployeeRepository class:
http://www.ifourtechnolab.com/
C# Software Development Companies India
Crud operations using Repository
Get All Employees
Get Single Employee Detail
http://www.ifourtechnolab.com/
C# Software Development Companies India
Crud operation using Repository
Insert Employee
Update Employee
http://www.ifourtechnolab.com/
C# Software Development Companies India
Crud operation using Repository
Delete Employee
http://www.ifourtechnolab.com/
C# Software Development Companies India
http://www.tutorialspoint.com/entity_framework/ http://www.entityframeworktutorial.net/ http://www.entityframeworktutorial.net/what-is-entityframework.aspx
References
http://www.ifourtechnolab.com/
C# Software Development Companies India
Questions?
http://www.ifourtechnolab.com/
C# Software Development Companies India