ORM Technologies and Entity Framework (EF)
Download
Report
Transcript ORM Technologies and Entity Framework (EF)
ORM Technologies and
Entity Framework (EF)
Entity Framework, DbContext, CRUD
Operations, Code First, Migrations
Svetlin Nakov
Inspiration Manager
Software University
http://softuni.bg
Table of Contents
1. ORM Technologies – Basic Concepts
2. Entity Framework – Overview
3. Database First with EF
4. Reading Data and CRUD operations with EF
5. Code First with EF
Domain Classes and DbContext
6. Migrations in EF
2
Introduction to ORM Technologies
What is Object-Relational Mapping (ORM)?
ORM Technologies
Object-Relational Mapping (ORM) is a programming technique
for automatic mapping data and database schema
Map relational DB tables to classes and objects
ORM creates a "virtual object database"
Used from the programming language (C#, Java, PHP, …)
ORM frameworks automate the ORM process
A.k.a. Object-Relational Persistence Frameworks
4
ORM Mapping – Example
Relational
database
schema
ORM
Framework
ORM
Entities
(C# classes)
5
Entity Framework (EF)
Object-Relation Persistence Framework for .NET
Overview of EF
Entity Framework (EF) is the standard ORM framework for .NET
Maps relational database to C# object model
Powerful data manipulation
API over the mapped schema
CRUD operations and complex querying with LINQ
Database first approach: from database to C# classes
Code first approach: from classes to DB schema
Visual Studio generates EF data models
Data mappings consist of C# classes, attributes and XML
7
EF: Basic Workflow
1. Define the data
model (use a DB
visual designer
or code first)
2. Write & execute
query over
IQueryable
3. EF generates &
executes an SQL
query in the DB
8
EF: Basic Workflow (2)
4. EF transforms
the query
results into
.NET objects
5. Modify data
with C# code
and call "Save
Changes"
6. Entity Framework
generates &
executes SQL
command to
modify the DB
9
Database First with Entity
Framework and Visual Studio
Live Demo
Entity Framework – Components
The DbContext class
DbContext holds the DB connection
Holds and DbSet<T> for the entity classes
Provides LINQ-based data access ( through IQueryable)
Provides API for CRUD operations
Entity classes
Hold entities (objects with their attributes and relations)
Each database table is typically mapped to a single C# entity class
11
Reading Data with LINQ Query
We can also use extension methods for constructing the query
using (var context = new SoftUniEntities())
{
var employees = context.Employees
This is called projection
.Select(c => c.FirstName)
.Where(c => c.JobTitle == "Design Engineering")
.ToList();
}
This is called
ToList() method
Find element by id
executes the SQL query
selection
using (var context = new SoftUniEntities())
{
var project = context.Projects.Find(2);
Console.WriteLine(project.Name);
}
12
Creating New Data
To create a new database row use the method Add(…) of the
corresponding collection:
var project = new Project()
Create a new
{
project object
Name = "Judge System",
StartDate = new DateTime(2015, 4, 15)
};
Mark the object for inserting
context.Projects.Add(order);
context.SaveChanges();
This will execute an SQL INSERT
SaveChanges() method executes the SQL insert / update /
delete commands in the database
13
Cascading Inserts
We can also add cascading entities to the database:
Employee employee = new Employee();
employee.FirstName = "Petya";
employee.LastName = "Grozdarska";
employee.Projects.Add(new Project { Name = "SoftUni Conf" } );
softUniEntities.Employees.Add(employee);
softUniEntities.SaveChanges();
This way we don't have to add Project individually
They will be added when the Employee entity (employee) is
inserted to the database
14
Updating Existing Data
DbContext allows modifying entity properties and persisting
them in the database
Just load an entity, modify it and call SaveChanges()
The DbContext automatically tracks all changes made on its
entity objects
Employees employee =
softUniEntities.Employees.First();
employees.FirstName = "Alex";
context.SaveChanges();
This will execute
This will execute an
SQL SELECT to load
the first order
an SQL UPDATE
15
Deleting Existing Data
Delete is done by Remove() on the specified entity collection
SaveChanges() method performs the delete action in the
database
Employees employee =
softUniEntities.Employees.First();
Mark the entity for
deleting at the next save
softUniEntities.Employees.Remove(employee);
softUniEntities.SaveChanges();
This will execute the
SQL DELETE command
16
Native SQL Queries
var context = new SoftUniEntities();
Parameter
string nativeSQLQuery =
placeholder
"SELECT FirstName + ' ' + LastName " +
"FROM dbo.Employees WHERE JobTitle = {0}";
var employees = context.Database.SqlQuery<string>(
nativeSQLQuery, "Marketing Specialist");
foreach (var emp in employees)
{
Console.WriteLine(emp);
}
Parameter
value
Return
type
17
CRUD Operations with EF
Live Demo
"Code First" Approach in EF
From Classes to DB Schema
Database First in EF
Create database schema and generate C# code (models) from it
DB
EDMX
Model
Domain
Classes
20
Code First in EF
DbContext &
ModelBuilder
Domain
classes
Custom
Configuration
DB
As needed
21
Domain Classes (Models)
Bunch of normal C# classes (POCO)
May hold navigation properties
public class PostAnswer
Primary key
{
public int Id { get; set; }
public string Content { get; set; }
Foreign key
public int PostId { get; set; }
public virtual Post Post { get; set; }
}
Navigation property
Virtual for lazy loading
22
Domain Classes (Models) (2)
Another example of domain class (model)
public class Post
{
This prevents
public Post()
NullReferenceException
{
this.Answers = new HashSet<PostAnswer>();
}
Navigation
property
public virtual ICollection<PostAnswer> Answers { get; set; }
public PostType Type { get; set; }
Enumeration
}
23
Defining the DbContext Class
using System.Data.Entity;
using CodeFirst.Models;
Put all entity
classes as DbSets
public class ForumContext : DbContext
{
public DbSet<Category> Categories { get; set; }
public DbSet<Post> Posts { get; set; }
public DbSet<PostAnswer> PostAnswers { get; set; }
public DbSet<Tag> Tags { get; set; }
}
24
CRUD Operations with EF Code First
var db = new ForumContext();
var category = new Category { Name = "Database course" };
db.Categories.Add(category);
var post = new Post();
post.Title = "Homework Deadline";
post.Content = "Please extend the homework deadline";
post.Type = PostType.Normal;
post.Category = category;
post.Tags.Add(new Tag { Text = "homework" });
post.Tags.Add(new Tag { Text = "deadline" });
db.Posts.Add(post);
db.SaveChanges();
25
"Code First" Approach in EF
Live Demo
Using Code First Migrations in EF
Code First Migrations in Entity Framework
Enable Code First Migrations
Open Package Manager Console
Run Enable-Migrations command
-EnableAutomaticMigrations for auto migrations
28
Using Code First Migrations in EF
Live Demo
ORM Technologies and Entity Framework (EF)
?
https://softuni.bg
Free Trainings @ Software University
Software University Foundation – softuni.org
Software University – High-Quality Education,
Profession and Job for Software Developers
softuni.bg
Software University @ Facebook
facebook.com/SoftwareUniversity
Software University @ YouTube
youtube.com/SoftwareUniversity
Software University Forums – forum.softuni.bg