1 entity framework introduction. outline goals of entity framework 2

of 37/37
1 Entity Framework Introduction

Post on 26-Dec-2015

223 views

Category:

Documents

2 download

Embed Size (px)

TRANSCRIPT

  • Slide 1
  • 1 Entity Framework Introduction
  • Slide 2
  • Outline Goals of Entity Framework 2
  • Slide 3
  • Source: Gil Fink http://blogs.microsoft.co.il/blogs/gilf The story so far The Impedance Mismatch Relational Database Conceptual / Business Model (Objects) 3
  • Slide 4
  • Traditional way.... Make a persistency layer that maps from SQL to OOP It is a better solution than accessing the db from many places in the application But it still can raise some problems, e.g.: Tight coupling between application and db (e.g. can not change tables in the db without making changes to domain classes in the application) Hard to maintain (e.g. SQL queries, dependent classes etc. might be spread in many places) Application and db domains are probably not the same Etc. 4
  • Slide 5
  • ORMs provides a way to map ORM is: (Wikipedia) A programming technique for converting data between incompatible type systems (such as DBMS) in relational databases and object-oriented programming languages.programmingtype systems relational databasesobject-oriented It does the plumbing work for you to aggregate, modify and save your data back to its storage in Object Oriented manner (easy to understand, maintain and extend) Source: Bishoy Demian 5
  • Slide 6
  • ORM external tools for.Net (Wikipedia) NHibernate, open source.netTiers, open source, based on commercial code generation tool (Codesmith) Developer Express, eXpress Persistent Objects (XPO) LLBLGen, open source drivers, commercial TierDeveloper, free ORM and code generation tool Subsonic, open source Source: Bishoy Demian 6
  • Slide 7
  • Source: Gil Fink http://blogs.microsoft.co.il/blogs/gilf Entity Framework is also a ORM Data access framework Supports data-centric applications and services Enables programming against a conceptual application model Enables independency of any data storage engine or relational schema 7
  • Slide 8
  • Source: Gil Fink http://blogs.microsoft.co.il/blogs/gilf Programming Against a Model EF uses a model called an Entity Data Model (EDM) EDM is a client-side data model EDM is an abstraction layer on top of the data storage Remove the pain of Interacting with the data storage Translating the data into objects 8
  • Slide 9
  • Source: Jeff Derstadt Entity Framework in a Nutshell Goal: Simple and seamless data access for the.NET platform Better layering Better re-use of existing knowledge and assets EDM Entity Data Model An abstract model for defining entities and relationships Includes schema and mapping Store Schema Definition (SSDL) Conceptual Schema Definition (CSDL) Mapping Schema between the two (MSL) Entity Framework An implementation of EDM and an ORM layer on top A framework for using entities over data 9
  • Slide 10
  • Source: Jeff Derstadt Data Store The Entity Framework has no knowledge of the database that stores the data It connects and interacts with the database through a provider that is usually declared in the configuration file As in ADO.NET the providers are supplied by the dbms vendors Some supported dbmses: SQLServer ;-) Oracle MySQL postgreSQL db2... 10
  • Slide 11
  • Source: Jeff Derstadt Getting Started DB Model Code DB Model Code DB Model Code Design time Runtime Model First (VS 2010 and.NET 4.0) Code First (Entity Framework Feature CTP3) why? it already exists, or you want low level control over the database why? you want separation from code and database in a declarative format why? primarily focused on code shape, database is an implementation detail 11 Database First (VS 2008 and.NET 3.5 SP1)
  • Slide 12
  • Source: Jeff Derstadt Whats New in.NET 4.0 Theres more! Self-tracking entities SQL generation improvements ObjectStateManager control WPF designer integration SPROC import improvements Model defined functions Code-Only development (Feature CTP) Model-first development Automatic pluralization Lazy loading POCO class support T4 Code Generation Template customization ObjectSet/IObjectSet Foreign keys in models Virtual SaveChanges ExecuteStoreQuery ExecuteStoreCommand More LINQ operator support 12
  • Slide 13
  • Demo: Database first How to create an entity model from an existing database 13
  • Slide 14
  • Create a new entity model, step 1 Create a class library project Add new item, select the ADO.NET Entity Data Model template 14
  • Slide 15
  • Create a new entity model, step 2 When database first, select Generate From Database Select the database connection Select the database entities that shall be visible Important: enable Pluralize... and foreign keys 15
  • Slide 16
  • Create a new entity model, step 3 Adjust the entities, mapping etc. 16
  • Slide 17
  • Source: Gil Fink http://blogs.microsoft.co.il/blogs/gilf The Designer Window Graphical representation of an EDM and its members Enables adding more features to the model Enables properties configuration Enables updating from the data store Enables model validation 17
  • Slide 18
  • Entity in the designer Singularization and pluralization: The many part is named in plural, e.g. Orders The one part is named in single, e.g. Customer Navigation Properties: Make it possible to navigate from one entity (in code an object) to another. 18
  • Slide 19
  • The EDM Document consists of 3 parts The Entity Data Model (EDM) is a schema language for entities. It allows for the definition of entities, relationships between entities and logical sets of related entities Storage Metadata Schema (SSDL) is a formal description of the database that persists data for an application built on the Entity Data Model (EDM). The entities and associations declared in this schema are the basis for mapping entities and associations in the conceptual schema to the corresponding entities in the storage model. Mapping Specification (MSL) is used to connect the types declared in conceptual schema definition language (CSDL) to database metadata that persists data. Conceptual Schema (CSDL) is a design template for the object model that will be used by applications built on the Entity Data Model (EDM). 19
  • Slide 20
  • The relationships are declared in XML The output of the designer is an XML document that consists of 3 parts: 20 Source: Julia Lerman
  • Slide 21
  • Code Generation Entity classes are automatically generated from the EDM The classes consists primary of properties and events So it is possible to get and set values, and to get notified when an event occurs, e.g. an update 21
  • Slide 22
  • Use the generated code You should place the EDM and therefore the generated code in a class library (dll-assembly). Then you can access the EDM from your data-tier, business-tier, persistent-tier, etc. When you access from another assembly remember to add a reference to your EDM assembly and to system.data.entity And add using for your EDM in the code where the context class is used The connection string in the app.config must also be in the app-config for the exe-assembly. But it is easier to see in a demo 22
  • Slide 23
  • Demo: Access EDM assembly Access it from a console application Do a simple LINQ query and write the result on screen 23
  • Slide 24
  • Source: Gil Fink http://blogs.microsoft.co.il/blogs/gilf Querying the Model Queries are built against a data model EDM query transform into data storage query Query results materialize into model entities The image is taken from Julia Lermans book Programming Entity Framework, 1st Edition
  • Slide 25
  • Querying You can query the model in different ways: Using LINQ Using Entity SQL With Object Services With Entity Client 25
  • Slide 26
  • Querying with LINQ Straight forward LINQ syntax IntelliSense support 26 var context = new NWEntities(); var query = from c in context.Customers where c.Orders.Count()>25 select c; foreach(Customer c in query) Console.WriteLine(c.CompanyName); var context = new NWEntities(); var query = from c in context.Customers where c.Orders.Count()>25 select c; foreach(Customer c in query) Console.WriteLine(c.CompanyName);
  • Slide 27
  • Entity SQL with Object Services T-SQL-like query language EF translates Entity SQL into storage-specific queries Lazy queries No IntelliSense support 27 String queryString = @"SELECT VALUE c FROM Customers AS c WHERE c.Country='UK'"; var customers = Context.CreateQuery (queryString); foreach (Customer c in customers) Console.WriteLine(c.CompanyName); String queryString = @"SELECT VALUE c FROM Customers AS c WHERE c.Country='UK'"; var customers = Context.CreateQuery (queryString); foreach (Customer c in customers) Console.WriteLine(c.CompanyName);
  • Slide 28
  • Entity SQL with client queries Works like traditional PODA: Get a set of records from the data store E.g. like SQLClient or OracleClient No IntelliSense support 28 using (var conn = new EntityConnection("name=NWEntities")) { conn.Open(); var qStr = @"SELECT VALUE c FROM Customers AS c WHERE c.Country='UK'"; var cmd = conn.CreateCommand(); cmd.CommandText = qStr; using (var rdr = cmd.ExecuteReader()){ while (rdr.Read()){ Console.WriteLine(rdr.GetString(1)); } using (var conn = new EntityConnection("name=NWEntities")) { conn.Open(); var qStr = @"SELECT VALUE c FROM Customers AS c WHERE c.Country='UK'"; var cmd = conn.CreateCommand(); cmd.CommandText = qStr; using (var rdr = cmd.ExecuteReader()){ while (rdr.Read()){ Console.WriteLine(rdr.GetString(1)); }
  • Slide 29
  • Mutation Changes to entities are stored in memory: Every entity in ObjectContext has a ObjectStateEntry ObjectContext uses ObjectStateEntries to track entity changes The context.SaveChanges() method is used to update the database according to ObjectStateEntries Rollback (in memory) can be done with context.SaveChanges(false) The normal mutations insert, update and delete are possible 29
  • Slide 30
  • Insert Create a new instance (entity) of the class. Evt. set references to related objects (as normal in oop) Add the entity to the context. 30 Console.WriteLine("Create new order"); var order = new Order { CustomerID = "SEVES", EmployeeID = 1 }; context.AddToOrders(order); context.SaveChanges(); Console.WriteLine("Create new order"); var order = new Order { CustomerID = "SEVES", EmployeeID = 1 }; context.AddToOrders(order); context.SaveChanges();
  • Slide 31
  • Update Just get a reference to the entity Make the changes And call context.SaveChange() 31 Console.WriteLine("Changing order"); var order = from o in context.Orders where o.OrderID == 11078 select o; order.Single().OrderDate = DateTime.Now; context.SaveChanges(); Console.WriteLine("Changing order"); var order = from o in context.Orders where o.OrderID == 11078 select o; order.Single().OrderDate = DateTime.Now; context.SaveChanges();
  • Slide 32
  • Delete Get a reference to the entity Call context.DeleteObject(theEntity) Call context.SaveChanges() 32 Console.WriteLine("Deleting order"); var order = from o in context.Orders where o.OrderID == 11078 select o; context.DeleteObject(order.Single()); context.SaveChanges(); Console.WriteLine("Deleting order"); var order = from o in context.Orders where o.OrderID == 11078 select o; context.DeleteObject(order.Single()); context.SaveChanges();
  • Slide 33
  • Inheriance To types of inheriance Table-per-Hierarchy Inheritance Table-per-Type Inheritance These covers two different situations in SQL databases without O/R In the first situation youll have one type table where different subtypes are listed. In the second situation youll have a specialized table pr. type 33
  • Slide 34
  • Demo: Table-per-Hierarchy Inheritance Example based on School database from msdn Source: http://mosesofegypt.net/post/Inheritance-and- Associations-with-Entity-Framework-Part-1.aspx 34
  • Slide 35
  • Demo: Table-per-Type Inheritance Example based on School database from msdn Source: http://mosesofegypt.net/post/Inheritance-and- Associations-with-Entity-Framework-Part-2.aspx 35
  • Slide 36
  • Association no need to carry the full load Fields that are not used so frequently might be extracted to another entity with a 1-1 relation 36
  • Slide 37
  • Get the picture ;-) 37 //Get photo when needed AssoEntities assoContext = new AssoEntities(); var employee = (from e in assoContext.Employees select e).FirstOrDefault(); Console.WriteLine(employee.LastName); Console.WriteLine( employee.EmployeePhoto.Photo.Length.ToString()); //Get photo when needed AssoEntities assoContext = new AssoEntities(); var employee = (from e in assoContext.Employees select e).FirstOrDefault(); Console.WriteLine(employee.LastName); Console.WriteLine( employee.EmployeePhoto.Photo.Length.ToString()); //Get the photo together with the rest of Employee AssoEntities assoContext = new AssoEntities(); var employee = (from e in assoContext.Employees.Include("EmployeePhoto") select e).FirstOrDefault(); Console.WriteLine(employee.LastName); Console.WriteLine( employee.EmployeePhoto.Photo.Length.ToString()); //Get the photo together with the rest of Employee AssoEntities assoContext = new AssoEntities(); var employee = (from e in assoContext.Employees.Include("EmployeePhoto") select e).FirstOrDefault(); Console.WriteLine(employee.LastName); Console.WriteLine( employee.EmployeePhoto.Photo.Length.ToString());