Upload
james-johnson
View
1.776
Download
1
Tags:
Embed Size (px)
DESCRIPTION
Similar to Silicon Valley presentation with a few extra slides relating to Repositories
Citation preview
ASP.NET MVC and Entity FrameworkSoCal Code Camp
Saturday, October 23, 2010James Johnson
Technical Evangelist
• 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?
• 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
Demo
• 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
• 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
• 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
• 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
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• 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 FrameworkLazy Loading
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 FrameworkEager Loading
• 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
Entity FrameworkContexts
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();
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){ var newStudent = GetStudent(student.Id); var newCourse = GetCourse(course.Id); newStudent.Courses.Add(newCourse); _db.SaveChanges();}
• Very similar to LINQ to SQL• Major difference• LINQ to SQL - .SingleOrDefault()• LINQ to Entities - .FirstOrDefault()
Selectingpublic 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
Deletingpublic 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
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
• 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
Repositories
• Add the two projects to your solution• Add references to your project
using GenericRepositorypublic class MyController{ private readonly IGenericRepository _repo; private readonly CourseEntities _db;
public MyController() { _repo = new EFGenericRepository.EFGenericRepository(_db); }}
Repositories
// 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
Questions?
James [email protected]/latringoTwitter, @latringo
Inland Empire .NET User’s Groupwww.iedotnetug.org2nd Tuesday’s of each month in Riverside, CA
Thank you