Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
ASP.NET MVC and Entity Framework
Desert Code Camp
Saturday, November 13, 2010
James Johnson
Technical Evangelist
• Technical Evangelist with ComponentOne
• Founder and President of the Inland Empire .NET User’s
Group
• Microsoft MVP
• ...
• Overview of ASP.NET MVC
• Basic MVC Application
• Models, Views, Controls, Helpers
• Overview of Entity Framework
• Thin...
Demo
• Models
• Views
• Controllers
• No Post backs
• Very limited use of existing server controls
• Clean HTML makes CSS and J...
• First version (V 1) came with .NET 3.5 SP1
• August 2008
• Not widely thought of by the community
• Second version (V4) ...
• Why?
• Adds a layer of abstraction between Database and Code
• DBA can structure DB how they want
• Developer can map to...
• Entity Data Model – EDM
• Deals with the Entities and the Relationships they use
• Entities
• Instance of EntityType
• R...
Adding an EDM to your project
Demo
• A design pattern to defer initialization until needed.
• EF 4 fixes a lot of problems with this
• Supports Lazy Loading
...
Use if you will be needing every related entity
List<Thing> things = context.Things.Include(“ThingItems”);
foreach(var thi...
• The context is the instance of the entity
• Passing an entity around to tiers breaks the context
• V4 handles this issue...
Entity Framework
Contexts
public class ModelHelper
{
private static CourseEntities _db;
public static CourseEntities Cours...
Entity Framework
Contexts
private Student AddStudent(Student student, Course course)
{
student.Courses.Add(course);
_db.Sa...
• Very similar to LINQ to SQL
• Major difference
• LINQ to SQL - .SingleOrDefault()
• LINQ to Entities - .FirstOrDefault()...
Deleting
public void DeleteCourse(Course course)
{
_db.DeleteObject(course);
_db.SaveChanges();
}
Adding (Inserting)
publi...
Editing (Updating)
public void EditCourse(Course course)
{
_db.Courses.Attach(new Course { Id = course.Id });
_db.Courses....
• Repository pattern encapsulates code into a separate
class
• Allows for easy changes
• Can use it to switch database pro...
Repositories
• Add the two projects to your solution
• Add references to your project
using GenericRepository
public class MyController
{
private readonly IGenericRepository _repo;
private readonly CourseEnti...
// get
_repo.Get<Course>(id);
// edit
_repo.Edit(course);
// create
_repo.Create(course);
// delete
_repo.Delete(course);
...
Questions?
James Johnson
jamesj@componentone.com
http://c1.ms/latringo
www.speakerrate.com/latringo
http://bit.ly/latringo_dcc
Twitte...
Upcoming SlideShare
Loading in …5
×

ASP.NET MVC and Entity Framework 4

4,909 views

Published on

Slides from the November 2010 Desert Code Camp

Published in: Technology
  • Be the first to comment

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

×