1 / 37

Entity Framework Introduction

Entity Framework Introduction. Outline. Goals of Entity Framework. The story so far… . The “Impedance Mismatch”. ?. Relational Database . Conceptual / Business Model (Objects). Traditional way. Make a persistency layer that maps from SQL to OOP

marlie
Download Presentation

Entity Framework Introduction

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Entity Framework Introduction

  2. Outline Goals of Entity Framework

  3. The story so far… • The “Impedance Mismatch” ? Relational Database Conceptual / Business Model (Objects)

  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.

  5. ORM’s 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. • 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

  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

  7. 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

  8. 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

  9. 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

  10. 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 dbms’es: • SQLServer ;-) • Oracle • MySQL • postgreSQL • db2 • ...

  11. Getting Started • Database First (VS 2008 and .NET 3.5 SP1) why? it already exists, or you want low level control over the database DB Model Design time Design time Code • Model First (VS 2010 and .NET 4.0) why? you want separation from code and database in a declarative format DB Model Design time Design time Code • Code First (Entity Framework Feature CTP3) why? primarily focused on code shape, database is an implementation detail DB Model Runtime Runtime Code

  12. What’s New in .NET 4.0 • 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 There’s more! • Self-tracking entities • SQL generation improvements • ObjectStateManager control • WPF designer integration • SPROC import improvements • Model defined functions • Code-Only development (Feature CTP)

  13. Demo: Database first How to create an entity model from an existing database

  14. Create a new entity model, step 1 Create a class library project Add new item, select the ADO.NET Entity Data Model template

  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 visibleImportant: enable Pluralize... and foreign keys

  16. Create a new entity model, step 3 Adjust the entities, mapping etc.

  17. 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

  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.

  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).

  20. The relationships are declared in XML Source: Julia Lerman The output of the designer is an XML document that consists of 3 parts:

  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

  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 

  23. Demo: Access EDM assembly Access it from a console application Do a simple LINQ query and write the result on screen

  24. 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 Lerman’s bookProgramming Entity Framework, 1st Edition

  25. Querying • You can query the model in different ways: • Using LINQ • Using Entity SQL • With Object Services • With Entity Client

  26. Querying with LINQ var context = newNWEntities(); varquery = from c incontext.Customers wherec.Orders.Count()>25 select c; foreach(Customerc in query) Console.WriteLine(c.CompanyName); Straight forward LINQ syntax IntelliSense support

  27. Entity SQL with Object Services StringqueryString = @"SELECT VALUE c FROM Customers AS c WHERE c.Country='UK'"; varcustomers = Context.CreateQuery<Customer>(queryString); foreach(Customer c in customers) Console.WriteLine(c.CompanyName); T-SQL-like query language EF translates Entity SQL into storage-specific queries Lazy queries No IntelliSense support

  28. Entity SQL with client queries using (var conn = newEntityConnection("name=NWEntities")) { conn.Open(); varqStr = @"SELECT VALUE c FROM Customers AS c WHERE c.Country='UK'"; varcmd = conn.CreateCommand(); cmd.CommandText= qStr; using(varrdr = cmd.ExecuteReader()){ while(rdr.Read()){ Console.WriteLine(rdr.GetString(1)); } } } Works like traditional PODA: Get a set of records from the data store E.g. like SQLClient or OracleClient No IntelliSense support

  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

  30. Insert Console.WriteLine("Create new order"); varorder = newOrder { CustomerID = "SEVES", EmployeeID = 1 }; context.AddToOrders(order); context.SaveChanges(); Create a new instance (entity) of the class. Evt. set references to related objects (as normal in oop) Add the entity to the context.

  31. Update Console.WriteLine("Changing order"); varorder = from o incontext.Orders whereo.OrderID == 11078 select o; order.Single().OrderDate = DateTime.Now; context.SaveChanges(); Just get a reference to the entity Make the changes And call context.SaveChange()

  32. Delete Console.WriteLine("Deleting order"); varorder = from o incontext.Orders whereo.OrderID == 11078 select o; context.DeleteObject(order.Single()); context.SaveChanges(); Get a reference to the entity Call context.DeleteObject(theEntity) Call context.SaveChanges()

  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 you’ll have one ”type table” where different subtypes are listed. • In the second situation you’ll have a specialized table pr. type

  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

  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

  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

  37. Get the picture ;-) //Get photo when needed AssoEntitiesassoContext = newAssoEntities(); varemployee = (from e inassoContext.Employees select e).FirstOrDefault(); Console.WriteLine(employee.LastName); Console.WriteLine( employee.EmployeePhoto.Photo.Length.ToString()); //Get the photo together with the rest of Employee AssoEntitiesassoContext = newAssoEntities(); varemployee = (from e inassoContext.Employees.Include("EmployeePhoto") selecte).FirstOrDefault(); Console.WriteLine(employee.LastName); Console.WriteLine(employee.EmployeePhoto.Photo.Length.ToString());

More Related