How to Troubleshoot Apps for the Modern Connected Worker
MVC and Entity Framework
1. ASP.NET MVC and Entity Framework Utah Code Camp Saturday, September 25, 2010 James Johnson Technical Evangelist
2. Technical Evangelist with ComponentOne Founder and President of the Inland Empire .NET User’s Group Microsoft MVP But I don’t consider myself an expert. I just love to play ADHD/ADD/OCD when it comes to new technology Can’t stay away from the shiny new stuff Please don’t drop any new coins during the presentation Who am I?
3. Overview of ASP.NET MVC Overview of Entity Framework Things that are cool Things to watch out for How to do it Agenda
5. Models Views Controllers No Postbacks Very limited use of existing server controls Clean HTML makes CSS and JavaScript easier What all the cool kids are using these days. ASP.NET MVC
6. First version (V 1) came with .NET 3.5 SP1 August 2008 Not widely thought of by the community Second version (V4) released with .NET 4 Maps POCO objects to Database objects A collection of things instead of a dataset of rows “things” are the Entities Entity Framework
7. Why? Adds a layer of abstraction between Database and Code DBA can structure DB how they want Developer can map to the DB how they want Rename Entities for more comfortable use. EF handles the mapping Entity Framework
8. Entity Data Model – EDM Deals with the Entities and the Relationships they use Entities Instance of EntityType Represent individual instances of the objects Customer, books, shoes Fully typed Relationships V1 was difficult to work with relationships Needed special tricks to load related data Entity FrameworkDefinitions
14. ObjectContext setting, not application settingcontext.ContextOptions.DeferredLoadingEnabled=true; List<Thing> things = context.Things.ToList(); foreach(var thing in things) { varthingItems = thing.ThingItems } Entity FrameworkLazy Loading
15. Use if you will be needing every related entity List<Thing> things = context.Things.Include(“ThingItems”); foreach(var thing in things) { varthingItems = thing.ThingItems } Entity FrameworkEager Loading
16. The context is the instance of the entity Passing an entity around to tiers breaks the context V4 handles this issue with “self-tracking” entities Make sure the context is always the same Entity FrameworkContexts
17. Entity FrameworkContexts public class ModelHelper { private static CourseEntities _db; public static CourseEntitiesCourseEntities { get { if(_db == null) _db = new CourseEntities(); return _db; } set { _db = value; } } } private readonlyCourseEntities _db = new CourseEntities();
18. Entity FrameworkContexts private Student AddStudent(Student student, Course course) { student.Courses.Add(course); _db.SaveChanges(); } Didn’t work because course was in a different context private Student AddStudent(Student student, Course course) { varnewStudent = GetStudent(student.Id); varnewCourse = GetCourse(course.Id); newStudent.Courses.Add(newCourse); _db.SaveChanges(); }
19. Very similar to LINQ to SQL Major difference LINQ to SQL - .SingleOrDefault() LINQ to Entities - .FirstOrDefault() Selecting public Course GetCourse(int id) { var course = (from c in _db.Courses where c.Id.Equals(id) select c).FirstOrDefault(); return course; } Entity FrameworkLINQ to Entities
20. Deleting public void DeleteCourse(Course course) { _db.DeleteObject(course); _db.SaveChanges(); } Adding (Inserting) public void AddCourse(Course course) { _db.AddToCourses(course); //this will be a list of AddToX _db.SaveChanges(); } Entity FrameworkLINQ to Entities
21. Editing (Updating) public void EditCourse(Course course) { _db.Courses.Attach(new Course { Id = course.Id }); _db.Courses.ApplyCurrentValues(course); _db.SaveChanges(); } “course” has been edited somewhere else – MVC Controller, so a “stand-in” is created Entity FrameworkLINQ to Entities
24. James Johnson jamesj@componentone.com www.latringo.me Twitter, @latringo Inland Empire .NET User’s Group www.iedotnetug.org 2nd Tuesday’s of each month in Riverside Thank you