Upload
ashlynn-bishop
View
291
Download
3
Tags:
Embed Size (px)
Citation preview
ORM Technologies and Entity Framework (EF)
Entity Framework, DbContext, CRUD Operations, Code First, Migrations
Svetlin NakovInspiration ManagerSoftware Universityhttp://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 TechnologiesWhat is Object-Relational Mapping (ORM)?
4
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
ORM Technologies
5
ORM Mapping – Example
ORMFramework
Relational database schema
ORM Entities
(C# classes)
Entity Framework (EF)Object-Relation Persistence Framework for .NET
7
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
Overview of EF
8
EF: Basic Workflow
2. Write & execute query over IQueryable
3. EF generates & executes an SQL query in the DB
1. Define the data model (use a DB visual designer or code first)
9
EF: Basic Workflow (2)
5. Modify data with C# code and call "Save Changes"
6. Entity Framework generates & executes SQL command to modify the DB
4. EF transforms the queryresults into .NET objects
Database First with EntityFramework and Visual Studio
Live Demo
11
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
12
We can also use extension methods for constructing the query
Find element by id
Reading Data with LINQ Query
using (var context = new SoftUniEntities()){ var project = context.Projects.Find(2); Console.WriteLine(project.Name);}
using (var context = new SoftUniEntities()){ var employees = context.Employees .Select(c => c.FirstName) .Where(c => c.JobTitle == "Design Engineering") .ToList();}
This is called projection
ToList() method executes the SQL query
This is called selection
13
To create a new database row use the method Add(…) of the corresponding collection:
SaveChanges() method executes the SQL insert / update / delete commands in the database
Creating New Data
var project = new Project(){ Name = "Judge System", StartDate = new DateTime(2015, 4, 15)};
context.Projects.Add(order);context.SaveChanges(); This will execute an SQL INSERT
Create a new project object
Mark the object for inserting
14
We can also add cascading entities to the database:
This way we don't have to add Project individually They will be added when the Employee entity (employee) is
inserted to the database
Cascading Inserts
Employee employee = new Employee();employee.FirstName = "Petya";employee.LastName = "Grozdarska";employee.Projects.Add(new Project { Name = "SoftUni Conf" } ); softUniEntities.Employees.Add(employee);softUniEntities.SaveChanges();
15
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
Updating Existing Data
Employees employee = softUniEntities.Employees.First();employees.FirstName = "Alex";context.SaveChanges(); This will execute
an SQL UPDATE
This will execute an SQL SELECT to load
the first order
16
Delete is done by Remove() on the specified entity collection SaveChanges() method performs the delete action in the
database
Deleting Existing Data
Employees employee = softUniEntities.Employees.First();
softUniEntities.Employees.Remove(employee);
softUniEntities.SaveChanges();
Mark the entity for deleting at the next save
This will execute the SQL DELETE command
17
Native SQL Queries
var context = new SoftUniEntities();string nativeSQLQuery = "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 placeholder
Parameter value
Return type
CRUD Operations with EFLive Demo
"Code First" Approach in EFFrom Classes to DB Schema
20
Create database schema and generate C# code (models) from it
Database First in EF
DBEDMX Model
Domain Classes
21
Code First in EF
Custom Configuration
DbContext & ModelBuilder
Domain classes
As needed
DB
22
Domain Classes (Models)
Bunch of normal C# classes (POCO) May hold navigation properties
public class PostAnswer{ public int Id { get; set; } public string Content { get; set; } public int PostId { get; set; } public virtual Post Post { get; set; }}
Primary key
Foreign key
Navigation property
Virtual for lazy loading
23
Another example of domain class (model)
Domain Classes (Models) (2)
public class Post{ public Post() { this.Answers = new HashSet<PostAnswer>(); }
public virtual ICollection<PostAnswer> Answers { get; set; } public PostType Type { get; set; }}
This prevents NullReferenceException
Navigation property
Enumeration
24
Defining the DbContext Class
using System.Data.Entity;
using CodeFirst.Models;
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; }}
Put all entity classes as DbSets
25
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();
"Code First" Approach in EFLive Demo
Using Code First Migrations in EF
28
Enable Code First Migrations Open Package Manager Console Run Enable-Migrations command
-EnableAutomaticMigrations for auto migrations
Code First Migrations in Entity Framework
Using Code First Migrations in EFLive Demo
Questions??
??
?
?
??
?
?
https://softuni.bg
ORM Technologies and Entity Framework (EF)
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