Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Entity Framework 4 In Microsoft Visual Studio 2010
1. ADO.NET Entity Framework in Microsoft Visual Studio 2010 and Microsoft .NET Framework 4 Eric Nelson eric.nelson@microsoft.com http://geekswithblogs.net/iupdateable http://twitter.com/ericnel Developer Evangelist Microsoft UK Advert Alert http://ukazure.ning.com
2. Agenda Swift intro to Entity Framework Entity Framework 4.0 Drill Down Lots of demos
5. ADO.NET Entity Framework Recap Entity Data Model Tools and services to create an Entity Data Model (EDM) Conceptual to Mapping to Storage Tools and services for consuming an Entity Data Model LINQ to Entities, Object Services and Entity SQL Together they address the “impedance mismatch” Objects in Applications Conceptual Mapping Storage Rows in Tables
7. Entity Framework 1.0 Features Generate model from database schema Very rich mapping layer Inheritance, rename, aggregate, filter Simplified CRUD operations LINQ querying* Worked with many databases Database agnostic query language SP support for data retrieval/modification* Designer* Strategic!
8. Entity Framework 1.0 - Too many pain points The designer! Model First not supported Poor support for Stored Procedures No Pluralization/Singularization Foreign Keys hidden Lazy Loading not supported Missing LINQ Operators vs LINQ to SQL Generated SQL unreadable No support for Plain Old CLR Objects N-Tier difficult
10. New in ADO.NET Entity Framework 4.0 Model-first development Automatic pluralization Foreign keys in models POCO class support Lazy loading T4 Code Generation Template customization IObjectSet Virtual SaveChanges ObjectStateManager control Self-tracking entities SQL generation improvements More LINQ operator support LINQ extensibility ExecuteStoreQuery ExecuteStoreCommand SPROC import improvements Model defined functions WPF designer integration Code-Only development (Feature CTP)
11. Entity Framework 4.0 - Removing the friction Better Tools and Design Experience More powerful/flexible runtime And Persistence Ignorance* N-Tier Code Only* Note: * Delivered in .NET Framework 4 and a separate download
12. Better Tools and Design Experience Model First Templated code generation Stored Procedures Pluralization/Singularization Complex Types Better delete and search
17. Feature Pack Separate download Contents T4 Template for Persistence Ignorance/POCO T4 Template for self-tracking entities (Now part of VS2010 RC) Code-only support When VS2010 is RTM, Feature Pack will be high quality.
25. Entity Framework The designer! No support for Plain Old CLR Objects No Pluralization/Singularization Foreign Keys hidden Model First not supported Lazy Loading not supported Missing LINQ Operators vs LINQ to SQL Generated SQL unreadable N-Tier difficult Poor support for Stored Procedures
26. Summary Entity Framework 4.0 is rather nice! We continue to listen and improve Resources Entity Framework 4.0 Resources http://bit.ly/ef4resources Entity Framework Team Blog http://blogs.msdn.com/adonet/ Entity Framework Design Blog http://blogs.msdn.com/efdesign/
Look at the problems that EF addresses: - opaque database commands buried in strings - tedious, repetitive code to materialise objectsCreate connectionSQL String – embedded joinsDataReader – not type safe
Type safe codeNo joins as we’ve abstracted away the database representation. (If we had joins then the compiler could verify them)Familiar query syntax (L2O, L2Xml, ...)Working with objects
Some of the features of EF v1...Abstract the db model. Get a richer object/entity model to work with in the application. Isolate from change.Work with objects not tables. Have object relationships.Type-safe queries. Easy to query across relationships (just access properties on the objects!). Compile-time checking.Pretty good start, some rough areas. Mention vote of no confidence
Yep, apparently “4” is the number after “1” in marketing ;-)Aligning version numbers with .NET 4, C#4. Don’t be alarmed if you see a reference to EF4!
Code GenIn V1 we had EntityClassGenerator which could be configured using eventsHard (it used CodeDom)Inflexible (not much control)In V2 we will haveTemplatedEntityClassGenerator and will ship default T4 templatesCustomization via ToolsUses Workflow FoundationComplex typesPluralizationPublic abstract PluralizationServiceDefault implementation is English OnlyDefault rules:EntityTypes / ComplexTypes are singularizedEntitySets are pluralizedNavigation Properties based on cardinalityStored ProceduresStored Procedures as functionsMapping support for stored procedure resultComplex type as return typeScalar and void return typeEntity CUD using Stored ProceduresNo need to have SPs for all CUD
Foreign KeysIndependent Association – v1 Product p = new Product { ID = 1, Name = "Bovril", Category = context.Categories .Single(c => c.Name == "Food") }; context.SaveChanges(); FK Association – v2 Product p = new Product { ID = 1, Name = "Bovril", CategoryID = 13 }; context.Products.AddObject(p); context.SaveChanges();Deferred LoadingCan do lazy loadContext.deferredloading=true Model Level using ESQL<Function Name=“CustomerFullName” ReturnType=“String”><Parameter Name=“customer” Type=“MyModel.customer”> <DefiningExpression>customer.FirstName + ‘ ‘ + customer.LastName </DefiningExpression> </Function>Enables from c in ctx.Customers select c.FullName()CLR Level [EdmFunction("MyModel", "CustomerFullName")] public static string FullName(this customer c) { return String.Format("{0} {1}", c.FirstName, c.LastName); }Enables Console.WriteLine(c.FullName());Inline Functions in ESQL using Northwind;function AmountPurchased(c Customer) as Sum (c.Sales.Amt)function AmountReturned(c Customer) as Sum (c.Returns.Amt)function AmountConsumed(c Customer) as AmountPurchased(c) – AmountReturned(c)select AmountConsumed(c) from Customers as c;
Before going continuing, should mention the Feature Pack.Not all of the features I’m covering here will be in EF4 RTM, some (as mentioned in slide) will form the Feature Pack…
N-Tier – exposing EF classes via WCF.Lots of feedback around the difficulties with detaching/reattaching object from contextNew API to makes this easier (context.ObjectStateManager.ChangeRelationshipState). Self-tracking Entities T4 template to make this even easier. Click through the example. Refer to great sample app by Danny Simmons for MSDN Magazine.N.B. Self tracking entity functionality requires type sharing between service and client
Code OnlyNo XML files, no model!Convention to configE.g. Convention: xxxID to a primary key, schema=dboE.g. Config: On map to schema sys and class property to table column[TableMapping(Schema=“sys”,TableName=“MyDBTable”][ColumnMapping(PropertyName=“MyClassProp1”, ColumnName=“table_column1”)][Key(PropertyName=“MyClassProp1”)]public objectset<MyThing> MyThings...
Db First (v1 approach)Model first. Start from scratch in designer. Generate code and database from model. Database generation is driven via a workflow that you can replace (haven’t looked at this yet!)Code first (feature pack). You create your classes in code and add some code to tell EF about the classes and their relationships. EF essentially creates a model internally and creates the database for you.