230 likes | 384 Views
Microsoft Entity Framework v1.1 over Oracle Database. Erez Harari Sela Technology Center http://blogs.microsoft.co.il/blogs/erezh/ erezh@sela.co.il. Agenda. Using data in applications Entity Framework WH questions Using EF Designing a model Querying a model Working with the model
E N D
MicrosoftEntity Framework v1.1overOracle Database Erez Harari Sela Technology Center http://blogs.microsoft.co.il/blogs/erezh/ erezh@sela.co.il
Agenda • Using data in applications • Entity Framework WH questions • Using EF • Designing a model • Querying a model • Working with the model • Data binding support • What else is there • Future of EF
Storing application data • Almost all application stores data • Data is mostly stored in relation DBs • Data stored in tables • Related data is retrievable via views • Data is stored in a normalized manner • Business-Logic sometimes “leak” to the DB
Modeling the data • Applications support a more comprehensive model for data – Object Oriented Model • Class & Object (Entity type & instance) • Properties • Inheritance • Complex data-types
Combining the two • Mapping relational to OO can be sometimes problematic • Write code to load tables into classes • Write code to load Master-Detail relations • Write code to handle Create/Update/Delete (CUD) • Apply appropriate techniques to load & persist inheritance relations • Apply business logic to compute data after loading • We had semi-solutions for some of these issues (Typed Datasets) • We had 3rd party solutions – O/R (Object-Relational) Mapping tools
What Is Entity Framework? • An O/R Mapper • The next layer in Ado.Net • An entity model-driven architecture • The first step in an entity-aware data platform
Why Use Entity Framework? • Why couple your data and your entities? • Why write a DAL every time? • Why learn different types of SQL syntaxes? • Why work hard trying to handle inherited entities?
Where can we find EF? • Part of Visual Studio 2008 SP1 • No special project type is required
How does EF work? DevArttm dotConnect for Oracle
Just a taste DEMO
The Conceptual model • Conceptual model is based on Entity Model • Define entity types • Group inherited types to an entity set • Associate entities (1:1, 1:N, N:M)
The Storage model • Defines different types of relational data sources: • Table • View • Stored Procedure • Native SQL • Define functions for create / update / delete (CUD) • Use existing Stored-Procedures • Native SQL • Import SP that retrieve Entities or Simple types
Conceptual-Storage Mapping • Map entity to storage (table, SP…) • Allow filtering source data • Support mapping single entity to multiple storage sources • Map CUD functions to SP or SQL instead of auto-generated queries • Support concurrency through original values • Support result binding to query output
Building a model DEMO
Querying EF - eSQL • Brand new query language • Allow un-typed references – no compilation check • Can leverage inheritance and collections • Useful for dynamic query building Employees model = new Employees(); var query = model.CreateQuery<Person>( @"Select VALUE p From Employees.Person as p Where p.Age > @age"); query.Parameters.Add(new ObjectParameter("age", 30)); foreach (Person p in query) { Console.WriteLine(p.FirstName + " " + p.LastName ); }
Querying EF – Extension Methods • Query model against EDM • Typed references, using lambda expressions • Compiler verified • Can return anonymous types • A bit hard to read Employees model = new Employees(); int age = 30; var query = model.Person. Where(p => p.Age > age). Select(item => new { FullName = item.FirstName + " " + item.LastName }); foreach (var p in query) { Console.WriteLine(p.FullName); }
Querying EF – LINQ to Entities • LINQ-based syntax • Compiles as set of extension methods • Much more readable than extension methods • Makes building enhanced queries a lot easier Employees model = new Employees(); int age = 30; var query = from p in model.Person where p.Age > age select new { FullName = p.FirstName + " " + p.LastName}; foreach (var p in query) { Console.WriteLine(p.FullName); } 101 LINQ Samples http://tinyurl.com/62j6sb
from p in model.Person where p.Age > age select new {FullName = p.FirstName + " " + p.LastName}; model.Person. Where(p => p.Age > age). Select(p => new {FullName = p.FirstName + " " + p.LastName }); model.CreateQuery<DbDataRecord>( @"Select p.FirstName + "" "" + p.LastName as FullName From Employees.Person as p Where p.Age > @age"); Query tree structure SELECT 1 AS [C1], [Extent1].[FirstName] + ' ' + [Extent1].[LastName] AS [C2] FROM [dbo].[Person] AS [Extent1] WHERE [Extent1].[Age] > @age Querying - behind the scenes
Querying the model DEMO
Transactions and Concurrency • Transactions • All updates executed in .SaveChanges() are wrapped in a transaction • Fully integrated with System.Transactions • Supports explicitly transaction usage • Concurrency • Uses Ado.Net Optimistic concurrency checks (off by default) • Using non-default update & delete queries (Native-SQL, SP…) allows access to current & original data
Working with layers • EF objects can be detached from & attached to a context • EF objects support XML serialization • XmlSerializer • DataContractSerializer • Can be consumed through different service types: • ASP.NET Web Services • WCF Services • Ado.Net Data Services (also support JSON serialization)
Summary • No more need to write DAL code • Conceptual model satisfied using EDM • CRUD operations support with no additional code needed • Can be LINQed and queried in various ways • Conceals, but doesn’t prevent – you can still use your DB code (SQL / SP) if required to
Resources • ADO.NET Entity Framework • Data platform developer centerhttp://msdn.microsoft.com/en-us/data/aa937723.aspx • Ado.Net team Bloghttp://blogs.msdn.com/adonet • Forumhttp://forums.microsoft.com/msdn/ShowForum.aspx?ForumID=533&SiteID=1 • ADO.NET Entity Framework V2 Designhttp://blogs.msdn.com/efdesign • Contact Me • http://blogs.microsoft.co.il/blogs/erezh • erezh@sela.co.il