Top Banner
ORM Technologies and Entity Framework (EF) Entity Framework, DbContext, CRUD Operations, Code First, Migrations Svetlin Nakov Inspiration Manager Software University http:// softuni.bg
33
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Entity Framework: Nakov @ BFU Hackhaton 2015

ORM Technologies and Entity Framework (EF)

Entity Framework, DbContext, CRUD Operations, Code First, Migrations

Svetlin NakovInspiration ManagerSoftware Universityhttp://softuni.bg

Page 2: Entity Framework: Nakov @ BFU Hackhaton 2015

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

Page 3: Entity Framework: Nakov @ BFU Hackhaton 2015

Introduction to ORM TechnologiesWhat is Object-Relational Mapping (ORM)?

Page 4: Entity Framework: Nakov @ BFU Hackhaton 2015

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

Page 5: Entity Framework: Nakov @ BFU Hackhaton 2015

5

ORM Mapping – Example

ORMFramework

Relational database schema

ORM Entities

(C# classes)

Page 6: Entity Framework: Nakov @ BFU Hackhaton 2015

Entity Framework (EF)The ORM Framework for .NET

Page 7: Entity Framework: Nakov @ BFU Hackhaton 2015

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

Page 8: Entity Framework: Nakov @ BFU Hackhaton 2015

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)

Page 9: Entity Framework: Nakov @ BFU Hackhaton 2015

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

Page 10: Entity Framework: Nakov @ BFU Hackhaton 2015

10

Install Entity Framework through the NuGet package manager

Installing Entity Framework

Page 11: Entity Framework: Nakov @ BFU Hackhaton 2015

Database First with EntityFramework and Visual Studio

Live Demo

Page 12: Entity Framework: Nakov @ BFU Hackhaton 2015

12

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

Page 13: Entity Framework: Nakov @ BFU Hackhaton 2015

13

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

Page 14: Entity Framework: Nakov @ BFU Hackhaton 2015

14

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

Page 15: Entity Framework: Nakov @ BFU Hackhaton 2015

15

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();

Page 16: Entity Framework: Nakov @ BFU Hackhaton 2015

16

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

Page 17: Entity Framework: Nakov @ BFU Hackhaton 2015

17

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

Page 18: Entity Framework: Nakov @ BFU Hackhaton 2015

18

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

Page 19: Entity Framework: Nakov @ BFU Hackhaton 2015

CRUD Operations with EFLive Demo

Page 20: Entity Framework: Nakov @ BFU Hackhaton 2015

"Code First" Approach in EFFrom Classes to DB Schema

Page 21: Entity Framework: Nakov @ BFU Hackhaton 2015

21

Create database schema and generate C# code (models) from it

Database First in EF

DBEDMX Model

Domain Classes

Page 22: Entity Framework: Nakov @ BFU Hackhaton 2015

22

Code First in EF

Custom Configuration

DbContext & ModelBuilder

Domain classes

As needed

DB

Page 23: Entity Framework: Nakov @ BFU Hackhaton 2015

23

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

Page 24: Entity Framework: Nakov @ BFU Hackhaton 2015

24

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

Page 25: Entity Framework: Nakov @ BFU Hackhaton 2015

25

Defining the DbContext Class

using System.Data.Entity;

using CodeFirst.Models;

public class ForumDbContext : 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

Page 26: Entity Framework: Nakov @ BFU Hackhaton 2015

26

CRUD Operations with EF Code First

var db = new ForumDbContext();

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();

Page 27: Entity Framework: Nakov @ BFU Hackhaton 2015

"Code First" Approach in EFLive Demo

Page 28: Entity Framework: Nakov @ BFU Hackhaton 2015

Using Code First Migrations in EF

Page 29: Entity Framework: Nakov @ BFU Hackhaton 2015

29

Enable Code First Migrations Open Package Manager Console Run Enable-Migrations command

-EnableAutomaticMigrations for auto migrations

Code First Migrations in Entity Framework

Page 30: Entity Framework: Nakov @ BFU Hackhaton 2015

30

Configuring the Migration Strategy

// Enable automatic DB migrations for ForumDbContextDatabase.SetInitializer( new MigrateDatabaseToLatestVersion< ForumDbContext, DbMigrationConfig>());

class DbMigrationConfig : DbMigrationsConfiguration<ForumDbContext>{ public Configuration() { AutomaticMigrationsEnabled = true; AutomaticMigrationDataLossAllowed = true; }}

Page 31: Entity Framework: Nakov @ BFU Hackhaton 2015

Using Code First Migrations in EFLive Demo

Page 33: Entity Framework: Nakov @ BFU Hackhaton 2015

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