real-world entity framework
DESCRIPTION
deck from our talk at DevTeachTRANSCRIPT
![Page 1: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/1.jpg)
Real-world Entity Framework
Llewellyn Falco – A Developer’s DeveloperLynn Langit – A DBA and more
![Page 2: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/2.jpg)
Agenda
QueryQuery
SaveSave
PatternsPatterns
![Page 3: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/3.jpg)
What is Entity Framework 4?
Object Relational Mapper (ORM)•Included in .NET 4.0•Developers write .NET code
• using LINQ • generate database access
code
![Page 4: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/4.jpg)
DEMO - startING with EFGenerating a Model
![Page 5: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/5.jpg)
What did we just do?
• Created a new project in Visual Studio• Added a new ADO.NET Entity Model • Generated a model from a database• Reviewed the generated model
diagram• Created an ObjectContext
![Page 6: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/6.jpg)
Programmatically access data by…
ADO.NET
• Custom DAO• T-SQL
Entity Framework
• Complete DAO• LINQ
![Page 7: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/7.jpg)
Agenda
QueryQuery
![Page 8: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/8.jpg)
Real-World Problem #1 - Report
• Report for customer ‘Lynn’• Sent orders
# 54, #63, #57
• Partially sent orders #82: awaiting shoes, pants #92: awaiting gloves
• Unshipped orders #93 6 items #97 5 items
![Page 9: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/9.jpg)
The Report T-SQL
![Page 10: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/10.jpg)
Code DemoCurrent Practices- Life without Entity Framework
![Page 11: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/11.jpg)
Code DemoReport with Entity Framework
![Page 12: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/12.jpg)
Using EF – Writing a Query using LINQ
![Page 13: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/13.jpg)
Compare Extracting Data
![Page 14: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/14.jpg)
Mapping Relationships
CustomerIdName
CustomerIdName
Id Name Id Number Total Customerid
ADO.Net
InvoiceIdNumberTotalCustomerId
InvoiceIdNumberTotalCustomerId
CustomerIdName
CustomerIdName
InvoiceIdNumberTotalCustomerId
InvoiceIdNumberTotalCustomerId
EF
![Page 15: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/15.jpg)
Code Demo - ContinuedReport with Entity Framework
![Page 16: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/16.jpg)
Smart Objects
InvoiceIsShippedIsUnshippedIsPartiallyShiped
InvoiceIsShippedIsUnshippedIsPartiallyShiped
CustomerGetShippedGetUnshippedGetPartiallyShiped
CustomerGetShippedGetUnshippedGetPartiallyShiped
![Page 17: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/17.jpg)
Looking at the T-SQL Generated by EF
• Use SQL Profiler• Create a trace• Filter for
Application:• EntityFramework
![Page 18: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/18.jpg)
The N+1 Problem
1 + 1 + 5 = 7Customer Customers
InvoicesInvoices
ItemsTrips to
Database
![Page 19: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/19.jpg)
More about Loading – Why Lazy Loading
• Lazy is Good and Easy, but
Lazy isn’t always efficient Lazy is always correct Sometimes better to use selective eager loading
• Syntax – use .Include("invoices.invoiceItems”)• More about – lazy loading - here
![Page 20: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/20.jpg)
Code DemoConstrained Eager Loading
![Page 21: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/21.jpg)
Agenda
SaveSave
![Page 22: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/22.jpg)
Real-world Problem #2 – CRUD operations
WarehouseReport
Process Shipment
Load / Create Customer
Load / Create Invoice
Load / Create Invoice Item
Action
Remove Item
Set Item Shipped
ShippedCancelled
![Page 23: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/23.jpg)
Code Demo
Warehouse
Processing
![Page 24: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/24.jpg)
Using EF – Adding Data using LINQ
![Page 25: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/25.jpg)
With Entity Framework…
• Simplified/ Reduced data access code Save Encapsulates
Delete Insert Update Key relationship Order of operations Transactions
• Prevents Most SQL Injection Sanitizes database inputs
![Page 26: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/26.jpg)
SQL Injection and Entity Framework
“Little Bobby Tables”
![Page 27: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/27.jpg)
Agenda
Patterns
![Page 28: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/28.jpg)
Data Usage Patterns Load Model
Save Model
Manipulate Model
CommonPreferred
![Page 29: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/29.jpg)
Code DemoModularity
![Page 30: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/30.jpg)
Making Entity Framework Testable
Old Way
DoSomething()1)Get Data2)Manipulate Data3)Render Data
DoSomething()1)Get Data2)Manipulate Data3)Render Data
DoSomething()1)Load Data2)DoSomething(Data)
DoSomething()1)Load Data2)DoSomething(Data)
DoSomething(Data)1)Manipulate Data2)Render Data
DoSomething(Data)1)Manipulate Data2)Render Data
Load()1)Get DataLoad()1)Get Data
New Way - Testable
![Page 31: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/31.jpg)
Code DemoTesting Loaders
![Page 32: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/32.jpg)
MyProject.ControllerMyProject.Controller
MyProject.BusinessMyProject.Business
MyProject.ViewsMyProject.Views
MyProject.RulesMyProject.Rules
MyProject.ProcessesMyProject.Processes
Common Usage Pattern
Load Model
Save Model
Manipulate Model
![Page 33: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/33.jpg)
Common Usage Pattern
MyProject.ControllerMyProject.Controller
MyProject.BusinessMyProject.Business
MyProject.ViewsMyProject.Views
MyProject.RulesMyProject.Rules
MyProject.ProcessesMyProject.ProcessesMyProject.LoadersMyProject.Loaders
Load Model
Save Model
Manipulate Model
![Page 34: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/34.jpg)
Stored Procedures
• Security• Reduced Access• Performance• Modularity• Containment• Maintainability
![Page 35: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/35.jpg)
Mapping Stored Procedures to EF Models
![Page 36: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/36.jpg)
ORM to DB should be 1-1
• Complex mappings obscure the database
?=
![Page 37: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/37.jpg)
Existing Database Problems are
Amplified
• Primary Keys• Wide Tables• Bad Names• Dead Columns
![Page 38: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/38.jpg)
“Next Steps” for Attendees
• Use Entity Framework Write less CRUD code Protect against SQL Injection Master LINQ
• Use patterns / best practices with EF i.e. Loader pattern Modularity for testability (mocking)
• Map EF as closely as possible to the database Map 1-to-1 Fix design issues at the database level first
![Page 39: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/39.jpg)
More about learning LINQ – using Koans
• 28 progressive examples to help you learn LINQ• LinqKoans.codeplex.com
![Page 40: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/40.jpg)
Resources for Attendees
• EF team blog – here
• Julie Lehrman book - here
• Testing EF – video coming soon
On ApprovalTests YouTube playlist - here
www.ApprovalTests.com
![Page 41: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/41.jpg)
Related Session(s)
http://www.devteach.com/Schedule.aspx •SQL361 - Query Tuning Tips for SQL Server
![Page 42: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/42.jpg)
TeachingKidsProgramming.org
Do a Recipe Teach a Kid (Ages 10 ++)SmallBasic or Java Free Courseware (recipes)
![Page 43: Real-world Entity Framework](https://reader033.vdocuments.site/reader033/viewer/2022061211/5493815ab47959ed0a8b45b4/html5/thumbnails/43.jpg)
Contact Information
@LlewellynFalco@LlewellynFalcowww.ApprovalTests.comwww.ApprovalTests.com