entity framework: nakov @ bfu hackhaton 2015

33
ORM Technologies and Entity Framework (EF) Entity Framework, DbContext, CRUD Operations, Code First, Migrations Svetlin Nakov Inspiration Manager Software University http:// softuni.bg

Upload: svetlin-nakov

Post on 24-Jul-2015

8.165 views

Category:

Education


0 download

TRANSCRIPT

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)The ORM 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

10

Install Entity Framework through the NuGet package manager

Installing Entity Framework

Database First with EntityFramework and Visual Studio

Live Demo

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

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

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

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

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

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

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

CRUD Operations with EFLive Demo

"Code First" Approach in EFFrom Classes to DB Schema

21

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

Database First in EF

DBEDMX Model

Domain Classes

22

Code First in EF

Custom Configuration

DbContext & ModelBuilder

Domain classes

As needed

DB

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

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

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

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

"Code First" Approach in EFLive Demo

Using Code First Migrations in EF

29

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

-EnableAutomaticMigrations for auto migrations

Code First Migrations in Entity Framework

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; }}

Using Code First Migrations in EFLive Demo

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