ADO.NET EntityADO.NET Entity
FrameworkFramework
ORM Concepts, ADO.NET EntityORM Concepts, ADO.NET Entity
Framework (EF),Fr...
Table of ContentsTable of Contents
 ORM Technologies – Basic ConceptsORM Technologies – Basic Concepts
 Entity Framework...
Table of Contents (2)Table of Contents (2)
 Executing Native SQL QueriesExecuting Native SQL Queries
Paramerterless Quer...
Introduction to ORMIntroduction to ORM
Object-Relational Mapping (ORM)TechnologiesObject-Relational Mapping (ORM)Technolog...
ORM TechnologiesORM Technologies
 Object-Relational Mapping (ORM)Object-Relational Mapping (ORM) is ais a
programming tec...
ORM FrameworksORM Frameworks
 ORMORM frameworksframeworks typically provide thetypically provide the
following functional...
ORM Mapping – ExampleORM Mapping – Example
 Database and Entities mapping diagrams for aDatabase and Entities mapping dia...
ORM AdvantagesORM Advantages
 Object-relational mapping advantagesObject-relational mapping advantages
Developer product...
Approaches to ORMApproaches to ORM
 Template-based code generation vs. entityTemplate-based code generation vs. entity
cl...
Object Persistence FrameworksObject Persistence Frameworks
 Code generation toolsCode generation tools
Generate C#, XML ...
ORM Frameworks in .NETORM Frameworks in .NET
 Built-in ORM tools in .NET Framework and VSBuilt-in ORM tools in .NET Frame...
ADO.NET Entity FrameworkADO.NET Entity Framework
Object Relation Persistence FrameworkObject Relation Persistence Framework
Overview of ADO.NET EFOverview of ADO.NET EF
 Entity Framework (EF)Entity Framework (EF) is a standard ORMis a standard O...
Overview of ADO.NET EF (2)Overview of ADO.NET EF (2)
 Entity FrameworkEntity Framework provides an applicationprovides an...
Entity Data ModelEntity Data Model
 TheThe Entity Data Model (EDM)Entity Data Model (EDM) is a schemais a schema
language...
Entity Framework ArchitectureEntity Framework Architecture
16
Entity Framework FeaturesEntity Framework Features
 Entity Framework (EF)Entity Framework (EF) standard features:standard...
Entity Framework LifecycleEntity Framework Lifecycle
 When the application startsWhen the application starts
EFEF transl...
Entity Framework Lifecycle (2)Entity Framework Lifecycle (2)
 When the database returns the resultsWhen the database retu...
EF ComponentsEF Components
 TheThe ObjectContextObjectContext classclass
ObjectContextObjectContext holds the database c...
EF Components (2)EF Components (2)
 AssociationsAssociations
An association is a primary key / foreign keyAn association...
LINQ to Entity Files (.LINQ to Entity Files (.edmxedmx))
 Visual Studio has built-in Entity FrameworkVisual Studio has bu...
LINQ to Entity Files – ExampleLINQ to Entity Files – Example
 EDMXEDMX mapping for themapping for the CategoriesCategorie...
The Entity FrameworkThe Entity Framework
DesignerDesigner inVisual StudioinVisual Studio
Live DemoLive Demo
TheThe ObjectContextObjectContext ClassClass
 TheThe ObjectContextObjectContext class is generated by theclass is generat...
Using ObjectContext ClassUsing ObjectContext Class
 First create instance of theFirst create instance of the ObjectContex...
Reading Data with LINQ QueryReading Data with LINQ Query
 Executing LINQ-to-Entities query overExecuting LINQ-to-Entities...
Logging the Native SQL QueriesLogging the Native SQL Queries
 To print the native database SQL commandsTo print the nativ...
Retrieving Data withRetrieving Data with
LINQ to EntitiesLINQ to Entities
Live DemoLive Demo
Creating New DataCreating New Data
 To create a new database row use the methodTo create a new database row use the metho...
Creating New Data (2)Creating New Data (2)
 Creating new row can also be done by usingCreating new row can also be done b...
Cascading InsertsCascading Inserts
 We can also add cascading entities to theWe can also add cascading entities to the
da...
Updating Existing DataUpdating Existing Data
 ObjectContextObjectContext allows modifying entityallows modifying entity
p...
Deleting Existing DataDeleting Existing Data
 Delete is done byDelete is done by DeleteObjectDeleteObject()() on theon th...
CRUD Operations withCRUD Operations with
Entity FrameworkEntity Framework
Live DemoLive Demo
Executing NativeExecuting Native
SQL QueriesSQL Queries
Parameterless and ParameterizedParameterless and Parameterized
Executing Native SQL QueriesExecuting Native SQL Queries
 Executing a native SQL query in EntityExecuting a native SQL qu...
Executing Native SQL QueriesExecuting Native SQL Queries
(2)(2)
NorthwindEntities context = new NorthwindEntities();Northw...
Executing NativeExecuting Native
SQL QueriesSQL Queries
Live DemoLive Demo
The N+1 Query ProblemThe N+1 Query Problem
What is the N+1 Query Problem and How to Avoid It?What is the N+1 Query Problem...
The N+1 Query ProblemThe N+1 Query Problem
 What is theWhat is the N+1 Query ProblemN+1 Query Problem??
Imagine a databa...
The N+1 Query Problem (2)The N+1 Query Problem (2)
foreach (var cust in context.Customers)foreach (var cust in context.Cus...
Solution to the N+1 QuerySolution to the N+1 Query
ProblemProblem
 Fortunately there is an easy way in EF to avoidFortuna...
Solution to the N+1Solution to the N+1
Query ProblemQuery Problem
Live DemoLive Demo
Joining andJoining and
GroupingTablesGroupingTables
Join and Group Using LINQJoin and Group Using LINQ
Joining Tables in EFJoining Tables in EF
 InIn EFEF we can join tables inwe can join tables in LINQLINQ or by usingor by ...
Grouping Tables in EFGrouping Tables in EF
 Grouping also can be done by LINQGrouping also can be done by LINQ
The same ...
Joining andJoining and
GroupingTablesGroupingTables
Live DemoLive Demo
Attaching andAttaching and
Detaching ObjectsDetaching Objects
Attaching and DetachingAttaching and Detaching
ObjectsObjects
 In Entity Framework, objects can be attachedIn Entity Fram...
Attaching Detached ObjectsAttaching Detached Objects
 When a query is executed inside anWhen a query is executed inside a...
Detaching ObjectsDetaching Objects
 When an object is detached?When an object is detached?
When we obtain the object fro...
Attaching ObjectsAttaching Objects
 When we want to update a detached object weWhen we want to update a detached object w...
Attaching andAttaching and
Detaching ObjectsDetaching Objects
Live DemoLive Demo
UsingTransactions in EFUsingTransactions in EF
Just Use theJust Use the TransactionScopeTransactionScope ClassClass
Using Transactions in EFUsing Transactions in EF
 To perform transactional logic, just use theTo perform transactional lo...
Transactions in EFTransactions in EF
Live DemoLive Demo
Questions?
Entity FrameworkEntity Framework
ExercisesExercises
1.1. Using the Visual Studio Entity Framework designerUsing the Visual Studio Entity Framework designer...
Exercises (2)Exercises (2)
6.6. Create a database calledCreate a database called NorthwindTwinNorthwindTwin with thewith t...
Exercises (3)Exercises (3)
9.9. Create a method that places a new order in theCreate a method that places a new order in t...
Exercises (4)Exercises (4)
11.11. Create a database holding users and groups. CreateCreate a database holding users and gr...
Upcoming SlideShare
Loading in...5
×

ADO.NET Entity Framework

1,831

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,831
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
162
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

ADO.NET Entity Framework

  1. 1. ADO.NET EntityADO.NET Entity FrameworkFramework ORM Concepts, ADO.NET EntityORM Concepts, ADO.NET Entity Framework (EF),Framework (EF), ObjectContextObjectContext Doncho MinkovDoncho Minkov Telerik School AcademyTelerik School Academy schoolacademy.telerik.comschoolacademy.telerik.com Technical TrainerTechnical Trainer http://www.minkov.ithttp://www.minkov.it
  2. 2. Table of ContentsTable of Contents  ORM Technologies – Basic ConceptsORM Technologies – Basic Concepts  Entity FrameworkEntity Framework OverviewOverview Printing the native SQL queriesPrinting the native SQL queries LINQ ComponentsLINQ Components Entity FilesEntity Files The Visual Studio DesignerThe Visual Studio Designer ObjectContextObjectContext Class and CRUD OperationsClass and CRUD Operations 2
  3. 3. Table of Contents (2)Table of Contents (2)  Executing Native SQL QueriesExecuting Native SQL Queries Paramerterless QueriesParamerterless Queries Parameterized QueriesParameterized Queries  The N+1 Query ProblemThe N+1 Query Problem  Joining and Grouping EntitiesJoining and Grouping Entities  Attaching and Detaching ObjectsAttaching and Detaching Objects 3
  4. 4. Introduction to ORMIntroduction to ORM Object-Relational Mapping (ORM)TechnologiesObject-Relational Mapping (ORM)Technologies
  5. 5. ORM TechnologiesORM Technologies  Object-Relational Mapping (ORM)Object-Relational Mapping (ORM) is ais a programming technique for automaticprogramming technique for automatic mapping and converting datamapping and converting data Between relational database tables and object-Between relational database tables and object- oriented classes and objectsoriented classes and objects  ORM creates a “virtual object database“ORM creates a “virtual object database“ Which can be used from within theWhich can be used from within the programming language, e.g. C# or Javaprogramming language, e.g. C# or Java  ORM frameworksORM frameworks automate the ORM processautomate the ORM process A.k.a.A.k.a. object-relational persistence frameworksobject-relational persistence frameworks 5
  6. 6. ORM FrameworksORM Frameworks  ORMORM frameworksframeworks typically provide thetypically provide the following functionality:following functionality: Creating object model by database schemaCreating object model by database schema Creating database schema by object modelCreating database schema by object model Querying data by object-oriented APIQuerying data by object-oriented API Data manipulation operationsData manipulation operations  CRUDCRUD – create, retrieve, update, delete– create, retrieve, update, delete  ORMORM frameworksframeworks automatically generate SQLautomatically generate SQL to perform the requested data operationsto perform the requested data operations 6
  7. 7. ORM Mapping – ExampleORM Mapping – Example  Database and Entities mapping diagrams for aDatabase and Entities mapping diagrams for a subset of thesubset of the NorthwindNorthwind databasedatabase 7 RelationalRelational databasedatabase schemaschema ORMORM Entities (C#Entities (C# Classes)Classes) ORMORM FrameworFramewor kk
  8. 8. ORM AdvantagesORM Advantages  Object-relational mapping advantagesObject-relational mapping advantages Developer productivityDeveloper productivity  Writing less codeWriting less code Abstract from differences between object andAbstract from differences between object and relational worldrelational world  Complexity hidden within ORMComplexity hidden within ORM Manageability of the CRUD operations forManageability of the CRUD operations for complex relationshipscomplex relationships Easier maintainabilityEasier maintainability 8
  9. 9. Approaches to ORMApproaches to ORM  Template-based code generation vs. entityTemplate-based code generation vs. entity classes mappingsclasses mappings  SQL generation (design time / runtime) vs.SQL generation (design time / runtime) vs. mapping existing SQLmapping existing SQL  Entity classes representationEntity classes representation Entities are just POCO (Plain Old C# Objects)Entities are just POCO (Plain Old C# Objects) Entities implementEntities implement specialspecial IPersistentIPersistent interface or extendinterface or extend PersistentBasePersistentBase classclass  Configuring mappingsConfiguring mappings DB schema data vs. XML vs. annotationsDB schema data vs. XML vs. annotations 9
  10. 10. Object Persistence FrameworksObject Persistence Frameworks  Code generation toolsCode generation tools Generate C#, XML and other filesGenerate C#, XML and other files Source code is compiled and used as APISource code is compiled and used as API Can be highly customizedCan be highly customized  Object-relational mapping toolsObject-relational mapping tools Mappings are described in XML files or built inMappings are described in XML files or built in the classes as attributesthe classes as attributes No source code generationNo source code generation Use of single standard APIUse of single standard API 10
  11. 11. ORM Frameworks in .NETORM Frameworks in .NET  Built-in ORM tools in .NET Framework and VSBuilt-in ORM tools in .NET Framework and VS ADO.NET Entity FrameworkADO.NET Entity Framework LINQ-to-SQLLINQ-to-SQL Both combine entity class mappings and codeBoth combine entity class mappings and code generation, SQL is generated at runtimegeneration, SQL is generated at runtime  Third party ORM toolsThird party ORM tools NHibernateNHibernate – the old daddy of ORM– the old daddy of ORM Telerik OpenAccess ORMTelerik OpenAccess ORM 11
  12. 12. ADO.NET Entity FrameworkADO.NET Entity Framework Object Relation Persistence FrameworkObject Relation Persistence Framework
  13. 13. Overview of ADO.NET EFOverview of ADO.NET EF  Entity Framework (EF)Entity Framework (EF) is a standard ORMis a standard ORM framework, part of .NETframework, part of .NET Provides a run-time infrastructure for managingProvides a run-time infrastructure for managing SQL-based database data as .NET objectsSQL-based database data as .NET objects  The relational database schema is mapped toThe relational database schema is mapped to an object model (classes and associations)an object model (classes and associations) Visual Studio has built-in tools for generatingVisual Studio has built-in tools for generating Entity FrameworkEntity Framework SQL data mappingsSQL data mappings  Data mappings consist of C# classes and XMLData mappings consist of C# classes and XML A standard data manipulation API is providedA standard data manipulation API is provided 13
  14. 14. Overview of ADO.NET EF (2)Overview of ADO.NET EF (2)  Entity FrameworkEntity Framework provides an applicationprovides an application programming interface (API)programming interface (API) For accessing data stored in database serversFor accessing data stored in database servers Built on the top of ADO.NET and LINQBuilt on the top of ADO.NET and LINQ  LINQ to EntitiesLINQ to Entities is Microsoft’s entry-levelis Microsoft’s entry-level LINQ-enabled ORM implementation forLINQ-enabled ORM implementation for database serversdatabase servers Works with SQL Server and SQL Server ExpressWorks with SQL Server and SQL Server Express Could work with MySQL, SQLite, Oracle, etc.Could work with MySQL, SQLite, Oracle, etc. Maps tables and one-to-many and many-to-Maps tables and one-to-many and many-to- many relationshipsmany relationships 14
  15. 15. Entity Data ModelEntity Data Model  TheThe Entity Data Model (EDM)Entity Data Model (EDM) is a schemais a schema language for entities, consisting of:language for entities, consisting of: Conceptual model (CSDL)Conceptual model (CSDL) Mapping (MSL)Mapping (MSL) Storage Model (SSDL)Storage Model (SSDL) 15
  16. 16. Entity Framework ArchitectureEntity Framework Architecture 16
  17. 17. Entity Framework FeaturesEntity Framework Features  Entity Framework (EF)Entity Framework (EF) standard features:standard features: Maps tables, views, stored procedures andMaps tables, views, stored procedures and functions as .NET objectsfunctions as .NET objects Provides LINQ-based data queriesProvides LINQ-based data queries  Executed asExecuted as SQLSQL SELECTsSELECTs on the database serveron the database server CRUD operations –CRUD operations – CreateCreate//ReadRead//UpdateUpdate//DeleteDelete Create compiled queries – for executing theCreate compiled queries – for executing the same parameterized query multiple timessame parameterized query multiple times Creating or deleting the database schemaCreating or deleting the database schema 17
  18. 18. Entity Framework LifecycleEntity Framework Lifecycle  When the application startsWhen the application starts EFEF translates into SQL the language-integratedtranslates into SQL the language-integrated queries in the object modelqueries in the object model Sends them to the database for later executionSends them to the database for later execution 18
  19. 19. Entity Framework Lifecycle (2)Entity Framework Lifecycle (2)  When the database returns the resultsWhen the database returns the results Entity FrameworkEntity Framework translates the database rowstranslates the database rows back to .NET objectsback to .NET objects  The database server is transparent, hiddenThe database server is transparent, hidden behind the APIbehind the API  LINQ is executed overLINQ is executed over IQueryable<T>IQueryable<T>  At compile time a query expression tree isAt compile time a query expression tree is emittedemitted  At runtime SQL is generated and executedAt runtime SQL is generated and executed 19
  20. 20. EF ComponentsEF Components  TheThe ObjectContextObjectContext classclass ObjectContextObjectContext holds the database connectionholds the database connection and the entity classesand the entity classes Provides LINQ-based data accessProvides LINQ-based data access Implements identity tracking, change tracking,Implements identity tracking, change tracking, and API for CRUD operationsand API for CRUD operations  Entity classesEntity classes Each database table is typically mapped to aEach database table is typically mapped to a single entity class (C# class)single entity class (C# class) 20
  21. 21. EF Components (2)EF Components (2)  AssociationsAssociations An association is a primary key / foreign keyAn association is a primary key / foreign key based relationship between two entity classesbased relationship between two entity classes Allows navigation from one entity to another,Allows navigation from one entity to another, e.g.e.g. Student.CoursesStudent.Courses  Concurrency controlConcurrency control EntityEntity FrameworkFramework uses optimistic concurrencyuses optimistic concurrency control (no locking by default)control (no locking by default) Provides automatic concurrency conflictProvides automatic concurrency conflict detection and means for conflicts resolutiondetection and means for conflicts resolution 21
  22. 22. LINQ to Entity Files (.LINQ to Entity Files (.edmxedmx))  Visual Studio has built-in Entity FrameworkVisual Studio has built-in Entity Framework data designer and code generatordata designer and code generator Mappings are stored inMappings are stored in .edmx.edmx files (files (EEntityntity DDataata MModelodel XXMLML)) <database>.edmx<database>.edmx is an XML fileis an XML file  Holds metadata representing the databaseHolds metadata representing the database schema (CSDL, MSL and SSDL models)schema (CSDL, MSL and SSDL models) <database>.Designer.cs<database>.Designer.cs file contains the C#file contains the C# entity classes and theentity classes and the ObjectContextObjectContext classclass  One entity class for each mapped database tableOne entity class for each mapped database table 22
  23. 23. LINQ to Entity Files – ExampleLINQ to Entity Files – Example  EDMXEDMX mapping for themapping for the CategoriesCategories tabletable fromfrom NorthwindNorthwind database in SQL Serverdatabase in SQL Server 23 <EntityType Name="Categories"><EntityType Name="Categories"> <Key><Key> <PropertyRef Name="CategoryID" /><PropertyRef Name="CategoryID" /> </Key></Key> <Property Name="CategoryID" Nullable="false"<Property Name="CategoryID" Nullable="false" Type="int" StoreGeneratedPattern="Identity" />Type="int" StoreGeneratedPattern="Identity" /> <Property Name="CategoryName" Type="nvarchar"<Property Name="CategoryName" Type="nvarchar" Nullable="false" MaxLength="15" />Nullable="false" MaxLength="15" /> <Property Name="Description" Type="ntext"<Property Name="Description" Type="ntext" />/> <Property Name="Picture" Type="image" /><Property Name="Picture" Type="image" /> </EntityType></EntityType> EntityEntity classclass CategoryCategory
  24. 24. The Entity FrameworkThe Entity Framework DesignerDesigner inVisual StudioinVisual Studio Live DemoLive Demo
  25. 25. TheThe ObjectContextObjectContext ClassClass  TheThe ObjectContextObjectContext class is generated by theclass is generated by the Visual Studio designerVisual Studio designer  ObjectObjectContextContext provides:provides: Methods for accessing entities (object sets) andMethods for accessing entities (object sets) and creating new entities (creating new entities (AddToAddTo…… methods)methods) Ability to manipulate database data thoughAbility to manipulate database data though entity classes (read, modify, delete, insert)entity classes (read, modify, delete, insert) Easily navigate through the table relationshipsEasily navigate through the table relationships Executing LINQ queries as native SQL queriesExecuting LINQ queries as native SQL queries Create the DB schema in the database serverCreate the DB schema in the database server 25
  26. 26. Using ObjectContext ClassUsing ObjectContext Class  First create instance of theFirst create instance of the ObjectContextObjectContext::  In the constructor you can pass a databaseIn the constructor you can pass a database connection string and mapping sourceconnection string and mapping source  ObjectContextObjectContext propertiesproperties ConnectionConnection – the– the SqlConnectionSqlConnection to be usedto be used CommandTimeoutCommandTimeout – timeout for database SQL– timeout for database SQL commands executioncommands execution All entity classes (tables) are listed as propertiesAll entity classes (tables) are listed as properties  e.g.e.g. ObjectSet<Order>ObjectSet<Order> OrdersOrders {{ get;get; }} 26 NorthwindEntities northwind = new NorthwindEntities();NorthwindEntities northwind = new NorthwindEntities();
  27. 27. Reading Data with LINQ QueryReading Data with LINQ Query  Executing LINQ-to-Entities query overExecuting LINQ-to-Entities query over EFEF entity:entity:  CustomersCustomers property in theproperty in the ObjectContextObjectContext:: 27 public partial class NorthwindEntities : ObjectContextpublic partial class NorthwindEntities : ObjectContext {{ public ObjectSet<Customer> Customerspublic ObjectSet<Customer> Customers {{ get { … }get { … } }} }} NorthwindEntities context = new NorthwindEntities();NorthwindEntities context = new NorthwindEntities(); var customers =var customers = from c in context.Customersfrom c in context.Customers where c.City == "London"where c.City == "London" select c;select c; The query will be executes asThe query will be executes as SQL command in theSQL command in the databasedatabase
  28. 28. Logging the Native SQL QueriesLogging the Native SQL Queries  To print the native database SQL commandsTo print the native database SQL commands executed on the server use the following:executed on the server use the following: 28 var query = context.Countries;var query = context.Countries; Console.WriteLine((query as ObjectQuery).ToTraceString());Console.WriteLine((query as ObjectQuery).ToTraceString());  This will print the SQL native query executedThis will print the SQL native query executed at the database server to select theat the database server to select the CountriesCountries Can be printed to file usingCan be printed to file using StreamWriterStreamWriter classclass instead ofinstead of ConsoleConsole classclass
  29. 29. Retrieving Data withRetrieving Data with LINQ to EntitiesLINQ to Entities Live DemoLive Demo
  30. 30. Creating New DataCreating New Data  To create a new database row use the methodTo create a new database row use the method AddObject(…)AddObject(…) of theof the correspondingcorresponding collection:collection: 30 // Create new order object// Create new order object Order order = new Order()Order order = new Order() {{ OrderDate = DateTime.Now, ShipName = "Titanic",OrderDate = DateTime.Now, ShipName = "Titanic", ShippedDate = new DateTime(1912, 4, 15),ShippedDate = new DateTime(1912, 4, 15), ShipCity = "Bottom Of The Ocean"ShipCity = "Bottom Of The Ocean" };}; // Mark the object for inserting// Mark the object for inserting context.Orders.AddObject(order);context.Orders.AddObject(order); context.SaveChanges();context.SaveChanges(); This willThis will execute an SQLexecute an SQL INSERTINSERT  SaveChanges()SaveChanges() method call is required tomethod call is required to post the SQL commands to the databasepost the SQL commands to the database
  31. 31. Creating New Data (2)Creating New Data (2)  Creating new row can also be done by usingCreating new row can also be done by using thethe AddToAddTo ++ The_Entity_NameThe_Entity_Name methodmethod directly on thedirectly on the ObjectContextObjectContext This method is depricatedThis method is depricated Better use the other oneBetter use the other one 31 // Mark the object for inserting// Mark the object for inserting context.AddToOrders(order);context.AddToOrders(order); // Post changes to database (execute SQL INSERTs)// Post changes to database (execute SQL INSERTs) context.SaveChanges();context.SaveChanges();
  32. 32. Cascading InsertsCascading Inserts  We can also add cascading entities to theWe can also add cascading entities to the database:database: 32 Country spain = new Country();Country spain = new Country(); spain.Name = "Spain";spain.Name = "Spain"; spain.Population = "46 030 10";spain.Population = "46 030 10"; spain.Cities.Add( new City { Name = "Barcelona"} );spain.Cities.Add( new City { Name = "Barcelona"} ); spain.Cities.Add( new City { Name = "Madrid"} );spain.Cities.Add( new City { Name = "Madrid"} ); countryEntities.Countries.AddObject(countryEntities.Countries.AddObject(spainspain);); countryEntities.SaveChanges();countryEntities.SaveChanges();  This way we don't have to add eachThis way we don't have to add each CityCity individuallyindividually They will be added when theThey will be added when the CountryCountry entityentity ((SpainSpain)) is inserted to the databaseis inserted to the database
  33. 33. Updating Existing DataUpdating Existing Data  ObjectContextObjectContext allows modifying entityallows modifying entity properties and persisting them in the databaseproperties and persisting them in the database Just load an entity, modify it and callJust load an entity, modify it and call SaveChangesSaveChanges()()  TheThe ObjectContextObjectContext automatically tracks allautomatically tracks all changes made on its entity objectschanges made on its entity objects 33 Order order = northwindEntities.Orders.First();Order order = northwindEntities.Orders.First(); order.OrderDate = DateTime.Now;order.OrderDate = DateTime.Now; context.SaveChanges();context.SaveChanges(); This will execute an SQLThis will execute an SQL SELECT to load the firstSELECT to load the first orderorder This willThis will execute an SQLexecute an SQL UPDATEUPDATE
  34. 34. Deleting Existing DataDeleting Existing Data  Delete is done byDelete is done by DeleteObjectDeleteObject()() on theon the specified entity collectionspecified entity collection  SaveChangesSaveChanges()() method performs the deletemethod performs the delete action in the databaseaction in the database 34 Order order = northwindEntities.Orders.First();Order order = northwindEntities.Orders.First(); // Mark the entity for deleting on the next save// Mark the entity for deleting on the next save northwindEntities.Orders.DeleteObject(order);northwindEntities.Orders.DeleteObject(order); northwindEntities.SaveChanges();northwindEntities.SaveChanges(); This willThis will execute an SQLexecute an SQL DELETEDELETE commandcommand
  35. 35. CRUD Operations withCRUD Operations with Entity FrameworkEntity Framework Live DemoLive Demo
  36. 36. Executing NativeExecuting Native SQL QueriesSQL Queries Parameterless and ParameterizedParameterless and Parameterized
  37. 37. Executing Native SQL QueriesExecuting Native SQL Queries  Executing a native SQL query in EntityExecuting a native SQL query in Entity Framework directly in its database store:Framework directly in its database store:  Example:Example:  Examples are shown in SQL Server but theExamples are shown in SQL Server but the same can be done for any other databasesame can be done for any other database ctx.ExecuteStoreQuery<return-type>(native-SQL-query);ctx.ExecuteStoreQuery<return-type>(native-SQL-query); string query = "SELECT count(*) FROM dbo.Customers";string query = "SELECT count(*) FROM dbo.Customers"; var queryResult = ctx.ExecuteStoreQuery<int>(query);var queryResult = ctx.ExecuteStoreQuery<int>(query); int customersCount = queryResult.FirstOrDefault();int customersCount = queryResult.FirstOrDefault(); 37
  38. 38. Executing Native SQL QueriesExecuting Native SQL Queries (2)(2) NorthwindEntities context = new NorthwindEntities();NorthwindEntities context = new NorthwindEntities(); string nativeSQLQuery =string nativeSQLQuery = "SELECT FirstName + ' ' + LastName " +"SELECT FirstName + ' ' + LastName " + "FROM dbo.Employees " +"FROM dbo.Employees " + "WHERE Country = {0} AND City = {1}";"WHERE Country = {0} AND City = {1}"; object[] parameters = { country, city };object[] parameters = { country, city }; var employees = context.ExecuteStoreQuery<string>(var employees = context.ExecuteStoreQuery<string>( nativeSQLQuery, parameters);nativeSQLQuery, parameters); foreach (var emp in employees)foreach (var emp in employees) {{ Console.WriteLine(emp);Console.WriteLine(emp); }}  Native SQL queries can also be parameterized:Native SQL queries can also be parameterized: 38
  39. 39. Executing NativeExecuting Native SQL QueriesSQL Queries Live DemoLive Demo
  40. 40. The N+1 Query ProblemThe N+1 Query Problem What is the N+1 Query Problem and How to Avoid It?What is the N+1 Query Problem and How to Avoid It?
  41. 41. The N+1 Query ProblemThe N+1 Query Problem  What is theWhat is the N+1 Query ProblemN+1 Query Problem?? Imagine a database that contains tablesImagine a database that contains tables CustomersCustomers andand OrdersOrders  A customer has multiple orders (one-to-manyA customer has multiple orders (one-to-many relationship)relationship) We want to print eachWe want to print each CustomerCustomer and itsand its OrdersOrders:: foreach (var cust in context.Customers)foreach (var cust in context.Customers) {{ Console.WriteLine(cust.CompanyName + "nOrders:");Console.WriteLine(cust.CompanyName + "nOrders:"); foreach (var order in cust.Orders)foreach (var order in cust.Orders) {{ Console.WriteLine("{0}", order.OrderID);Console.WriteLine("{0}", order.OrderID); }} }} 41
  42. 42. The N+1 Query Problem (2)The N+1 Query Problem (2) foreach (var cust in context.Customers)foreach (var cust in context.Customers) {{ Console.WriteLine(cust.CompanyName + "nOrders:");Console.WriteLine(cust.CompanyName + "nOrders:"); foreach (var order in cust.Orders)foreach (var order in cust.Orders) {{ Console.WriteLine("{0}", order.OrderID);Console.WriteLine("{0}", order.OrderID); }} }} A single query to retrieve the countriesA single query to retrieve the countries Additional N queries to retrieveAdditional N queries to retrieve the cities in each countrythe cities in each country  Imagine we have 100 countries in the databaseImagine we have 100 countries in the database That's 101 SQL queriesThat's 101 SQL queries  very slow!very slow! We could do the same with a single SQL queryWe could do the same with a single SQL query  This code will execute N+1 DB queries:This code will execute N+1 DB queries: 42
  43. 43. Solution to the N+1 QuerySolution to the N+1 Query ProblemProblem  Fortunately there is an easy way in EF to avoidFortunately there is an easy way in EF to avoid the N+1 query problemthe N+1 query problem 43 foreach (var country inforeach (var country in countriesEntities.Countries.Include("Cities"))countriesEntities.Countries.Include("Cities")) {{ foreach (var city in country.Cities)foreach (var city in country.Cities) {{ Console.WriteLine(" {0}", city.CityName);Console.WriteLine(" {0}", city.CityName); }} }} UsingUsing Include(…)Include(…) method only one SQLmethod only one SQL query with join is made to get the childquery with join is made to get the child entitiesentities No additional SQL queries areNo additional SQL queries are made here for the child entitiesmade here for the child entities
  44. 44. Solution to the N+1Solution to the N+1 Query ProblemQuery Problem Live DemoLive Demo
  45. 45. Joining andJoining and GroupingTablesGroupingTables Join and Group Using LINQJoin and Group Using LINQ
  46. 46. Joining Tables in EFJoining Tables in EF  InIn EFEF we can join tables inwe can join tables in LINQLINQ or by usingor by using extension methods onextension methods on IEnumerable<T>IEnumerable<T> The same way like when joining collectionsThe same way like when joining collections var custSuppl =var custSuppl = from customer in northwindEntities.Customersfrom customer in northwindEntities.Customers join supplier in northwindEntities.Suppliersjoin supplier in northwindEntities.Suppliers on customer.Country equals supplier.Countryon customer.Country equals supplier.Country select new {select new { CustomerName = customer.CompanyName,CustomerName = customer.CompanyName, Supplier = supplier.CompanyName,Supplier = supplier.CompanyName, Country = customer.CountryCountry = customer.Country };}; var custSuppl =var custSuppl = from customer in northwindEntities.Customersfrom customer in northwindEntities.Customers join supplier in northwindEntities.Suppliersjoin supplier in northwindEntities.Suppliers on customer.Country equals supplier.Countryon customer.Country equals supplier.Country select new {select new { CustomerName = customer.CompanyName,CustomerName = customer.CompanyName, Supplier = supplier.CompanyName,Supplier = supplier.CompanyName, Country = customer.CountryCountry = customer.Country };}; northwindEntities.Customers.northwindEntities.Customers. Join(northwindEntities.Suppliers,Join(northwindEntities.Suppliers, (c=>c.Country), (s=>s.Country), (c,s)=>(c=>c.Country), (s=>s.Country), (c,s)=> new {Customer = c.CompanyName, Supplier =new {Customer = c.CompanyName, Supplier = s.CompanyName, Country = c.Country });s.CompanyName, Country = c.Country }); northwindEntities.Customers.northwindEntities.Customers. Join(northwindEntities.Suppliers,Join(northwindEntities.Suppliers, (c=>c.Country), (s=>s.Country), (c,s)=>(c=>c.Country), (s=>s.Country), (c,s)=> new {Customer = c.CompanyName, Supplier =new {Customer = c.CompanyName, Supplier = s.CompanyName, Country = c.Country });s.CompanyName, Country = c.Country }); 46
  47. 47. Grouping Tables in EFGrouping Tables in EF  Grouping also can be done by LINQGrouping also can be done by LINQ The same ways as with collections in LINQThe same ways as with collections in LINQ  Grouping with LINQ:Grouping with LINQ:  Grouping with extension methods:Grouping with extension methods: var groupedCustomers =var groupedCustomers = from customer in northwindEntities.Customersfrom customer in northwindEntities.Customers group customer by Customer.Country;group customer by Customer.Country; var groupedCustomers =var groupedCustomers = northwindEntities.Customers.GroupBy(northwindEntities.Customers.GroupBy( customer => customer.Country);customer => customer.Country); 47
  48. 48. Joining andJoining and GroupingTablesGroupingTables Live DemoLive Demo
  49. 49. Attaching andAttaching and Detaching ObjectsDetaching Objects
  50. 50. Attaching and DetachingAttaching and Detaching ObjectsObjects  In Entity Framework, objects can be attachedIn Entity Framework, objects can be attached to or detached from an object contextto or detached from an object context  AttachedAttached objects are tracked and managed byobjects are tracked and managed by thethe ObjectContextObjectContext SaveChanges()SaveChanges() persists all changes in DBpersists all changes in DB  DetachedDetached objects are not referenced by theobjects are not referenced by the ObjectContextObjectContext Behave like a normal objects, like all others,Behave like a normal objects, like all others, which are not related to EFwhich are not related to EF 50
  51. 51. Attaching Detached ObjectsAttaching Detached Objects  When a query is executed inside anWhen a query is executed inside an ObjectContextObjectContext, the returned objects are, the returned objects are automatically attached to itautomatically attached to it  When a context is destroyed, all objects in itWhen a context is destroyed, all objects in it are automatically detachedare automatically detached E.g. in Web applications between the requestsE.g. in Web applications between the requests  You might late attach to a new context objectsYou might late attach to a new context objects that have been previously detachedthat have been previously detached 51
  52. 52. Detaching ObjectsDetaching Objects  When an object is detached?When an object is detached? When we obtain the object from anWhen we obtain the object from an ObjectContextObjectContext and theand the DisposeDispose itit Manually: by callingManually: by calling DetachDetach(…) method(…) method Product GetProduct(int id)Product GetProduct(int id) {{ using (NorthwindEntities northwindEntities =using (NorthwindEntities northwindEntities = new NorthwindEntities())new NorthwindEntities()) {{ return northwindEntities.Products.First(return northwindEntities.Products.First( p => p.ProductID == id);p => p.ProductID == id); }} }} 52 Now the returned product isNow the returned product is detacheddetached
  53. 53. Attaching ObjectsAttaching Objects  When we want to update a detached object weWhen we want to update a detached object we need to reattach it and the update itneed to reattach it and the update it Done by theDone by the Attach(…)Attach(…) method of the contextmethod of the context void UpdatePrice(Product product, decimal newPrice)void UpdatePrice(Product product, decimal newPrice) {{ using (NorthwindEntities northwindEntities =using (NorthwindEntities northwindEntities = new NorthwindEntities())new NorthwindEntities()) {{ northwindEntities.Products.Attach(product);northwindEntities.Products.Attach(product); product.UnitPrice = newPrice;product.UnitPrice = newPrice; northwindEntities.SaveChanges();northwindEntities.SaveChanges(); }} }} 53
  54. 54. Attaching andAttaching and Detaching ObjectsDetaching Objects Live DemoLive Demo
  55. 55. UsingTransactions in EFUsingTransactions in EF Just Use theJust Use the TransactionScopeTransactionScope ClassClass
  56. 56. Using Transactions in EFUsing Transactions in EF  To perform transactional logic, just use theTo perform transactional logic, just use the TransactionScopeTransactionScope classclass You may need to add reference toYou may need to add reference to System.Transactions.dllSystem.Transactions.dll using (TransactionScope scope = new TransactionScope())using (TransactionScope scope = new TransactionScope()) {{ NorthwindEntities context = new NorthwindEntities();NorthwindEntities context = new NorthwindEntities(); // Perform a series of changes in the context// Perform a series of changes in the context context.SaveChanges();context.SaveChanges(); scope.Complete();scope.Complete(); }} 56
  57. 57. Transactions in EFTransactions in EF Live DemoLive Demo
  58. 58. Questions? Entity FrameworkEntity Framework
  59. 59. ExercisesExercises 1.1. Using the Visual Studio Entity Framework designerUsing the Visual Studio Entity Framework designer create acreate a ObjectContextObjectContext for thefor the NorthwindNorthwind databasedatabase 2.2. Create a DAO class with static methods whichCreate a DAO class with static methods which provide functionality for inserting, modifying andprovide functionality for inserting, modifying and deleting customers. Write a testing class.deleting customers. Write a testing class. 3.3. Write a method that finds all customers who haveWrite a method that finds all customers who have orders made in 1997 and shipped to Canada.orders made in 1997 and shipped to Canada. 4.4. Implement previous by using native SQL query andImplement previous by using native SQL query and executing it through theexecuting it through the ObjectContextObjectContext.. 5.5. Write a method that finds all the sales by specifiedWrite a method that finds all the sales by specified region and period (start / end dates).region and period (start / end dates).
  60. 60. Exercises (2)Exercises (2) 6.6. Create a database calledCreate a database called NorthwindTwinNorthwindTwin with thewith the same structure assame structure as NorthwindNorthwind using the features fromusing the features from ObjectContextObjectContext. Find for the API for schema. Find for the API for schema generation in MSDN or in Google.generation in MSDN or in Google. 7.7. Try to open two different data contexts and performTry to open two different data contexts and perform concurrent changes on the same records. What willconcurrent changes on the same records. What will happen athappen at SaveChanges()SaveChanges()? How to deal with it?? How to deal with it? 8.8. By inheriting theBy inheriting the EmployeeEmployee entity class create a classentity class create a class which allows employees to access theirwhich allows employees to access their corresponding territories as property of typecorresponding territories as property of type EntitySet<T>EntitySet<T>..
  61. 61. Exercises (3)Exercises (3) 9.9. Create a method that places a new order in theCreate a method that places a new order in the NorthwindNorthwind database. The order should containdatabase. The order should contain several order items. Use transaction to ensure theseveral order items. Use transaction to ensure the data consistency.data consistency. 10.10. Create a stored procedures in theCreate a stored procedures in the NorthwindNorthwind database for finding the total incomes for givendatabase for finding the total incomes for given supplier name and period (start date, end date).supplier name and period (start date, end date). Implement a C# method that calls the storedImplement a C# method that calls the stored procedure and returns the retuned record set.procedure and returns the retuned record set. 61
  62. 62. Exercises (4)Exercises (4) 11.11. Create a database holding users and groups. CreateCreate a database holding users and groups. Create a transactional EF based method that creates ana transactional EF based method that creates an user and puts it in a group "Admins". In case theuser and puts it in a group "Admins". In case the group "Admins" do not exist, create the group in thegroup "Admins" do not exist, create the group in the same transaction. If some of the operations fail (e.g.same transaction. If some of the operations fail (e.g. the username already exist), cancel the entirethe username already exist), cancel the entire transaction.transaction. 62
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×