Microsoft has provided an ORM framework called "Entity Framework" to automate database related activities for application 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.
2. 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
https://www.ifourtechnolab.com/
3. 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 First
Database First
Model First
Entity Framework Approaches
https://www.ifourtechnolab.com/
4. 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
https://www.ifourtechnolab.com/
5. 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.)
https://www.ifourtechnolab.com/
6. 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.)
https://www.ifourtechnolab.com/
7. 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
https://www.ifourtechnolab.com/
8. 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
https://www.ifourtechnolab.com/
9. 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.)
https://www.ifourtechnolab.com/
10. Entity framework supports three types of relationships, same as database:
One to One
One to Many
Many to Many
Entity Relationships
https://www.ifourtechnolab.com/
11. 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
https://www.ifourtechnolab.com/
12. 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.)
https://www.ifourtechnolab.com/
13. 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.)
https://www.ifourtechnolab.com/
14. 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
https://www.ifourtechnolab.com/
15. 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.)
https://www.ifourtechnolab.com/
16. 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.)
https://www.ifourtechnolab.com/
17. 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
https://www.ifourtechnolab.com/
18. 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.)
https://www.ifourtechnolab.com/
19. 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.)
https://www.ifourtechnolab.com/
20. 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
https://www.ifourtechnolab.com/
21. 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
https://www.ifourtechnolab.com/
22. 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
https://www.ifourtechnolab.com/
24. 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:
https://www.ifourtechnolab.com/
25. Crud operations using Repository
Get All Employees
Get Single Employee Detail
https://www.ifourtechnolab.com/