ASP.NET MVC and Entity Framework 4

4,720 views

Published on

Slides from the November 2010 Desert Code Camp

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,720
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
70
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

ASP.NET MVC and Entity Framework 4

  1. 1. ASP.NET MVC and Entity Framework Desert Code Camp Saturday, November 13, 2010 James Johnson Technical Evangelist
  2. 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. 3. • Overview of ASP.NET MVC • Basic MVC Application • Models, Views, Controls, Helpers • Overview of Entity Framework • Things that are cool • Things to watch out for • How to do it Agenda
  4. 4. Demo
  5. 5. • Models • Views • Controllers • No Post backs • 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. 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. 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. 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 Framework Definitions
  9. 9. Adding an EDM to your project Demo
  10. 10. • A design pattern to defer initialization until needed. • EF 4 fixes a lot of problems with this • Supports Lazy Loading • OFF by default • ObjectContext setting, not application setting context.ContextOptions.DeferredLoadingEnabled=true; List<Thing> things = context.Things.ToList(); foreach(var thing in things) { var thingItems = thing.ThingItems } Entity Framework Lazy Loading
  11. 11. Use if you will be needing every related entity List<Thing> things = context.Things.Include(“ThingItems”); foreach(var thing in things) { var thingItems = thing.ThingItems } Entity Framework Eager Loading
  12. 12. • 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 Framework Contexts
  13. 13. Entity Framework Contexts public class ModelHelper { private static CourseEntities _db; public static CourseEntities CourseEntities { get { if(_db == null) _db = new CourseEntities(); return _db; } set { _db = value; } } } private readonly CourseEntities _db = new CourseEntities();
  14. 14. Entity Framework Contexts 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) { var newStudent = GetStudent(student.Id); var newCourse = GetCourse(course.Id); newStudent.Courses.Add(newCourse); _db.SaveChanges(); }
  15. 15. • 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 Framework LINQ to Entities
  16. 16. 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 Framework LINQ to Entities
  17. 17. 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 Framework LINQ to Entities
  18. 18. • Repository pattern encapsulates code into a separate class • Allows for easy changes • Can use it to switch database providers or new technologies • Stephen Walther – ASP.NET MVC Framework, Sams • stephenwalther.com • “Download the code” link Repositories
  19. 19. Repositories • Add the two projects to your solution • Add references to your project
  20. 20. using GenericRepository public class MyController { private readonly IGenericRepository _repo; private readonly CourseEntities _db; public MyController() { _repo = new EFGenericRepository.EFGenericRepository(_db); } } Repositories
  21. 21. // get _repo.Get<Course>(id); // edit _repo.Edit(course); // create _repo.Create(course); // delete _repo.Delete(course); // list var list = _repo.List<Course>().Where(x => x.CourseName.Contains()); Repositories
  22. 22. Questions?
  23. 23. James Johnson jamesj@componentone.com http://c1.ms/latringo www.speakerrate.com/latringo http://bit.ly/latringo_dcc Twitter, @latringo Inland Empire .NET User’s Group www.iedotnetug.org 2nd Tuesday’s of each month in Riverside, CA Thank you

×