mvc and entity framework 4

22
ASP.NET MVC and Entity Framework San Diego .NET User Group Tuesday, March 23, 2010 James Johnson

Upload: james-johnson

Post on 18-Dec-2014

3.181 views

Category:

Technology


4 download

DESCRIPTION

Slide deck presented to the San Diego .NET User Group on Tuesday, March 23, 2010

TRANSCRIPT

Page 1: MVC and Entity Framework 4

ASP.NET MVC and Entity Framework

San Diego .NET User GroupTuesday, March 23, 2010

James Johnson

Page 2: MVC and Entity Framework 4

Founder and President of the Inland Empire .NET User’s Group

Independent Consultant 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 shiny coins during the

presentation

Who am I?

Page 3: MVC and Entity Framework 4

An effort to help support local user groups by providing speakers

Telerik speakers bureau

Page 4: MVC and Entity Framework 4

Overview of ASP.NET MVC Overview of Entity Framework

Things that are cool Things to watch out for How to do it

Agenda

Page 5: MVC and Entity Framework 4

Demo

Page 6: MVC and Entity Framework 4

V 2.0 RTM’d March 11, 2010 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

Page 7: MVC and Entity Framework 4

Hey! There’s a big honking server control there!

Using the Telerik RadEditor in this project Very easy to setup if you follow these rules

Needs to be in a “form” tag, not Html.BeginForm()

Handlers need to be changed from .aspx to .axd DialogHandlerUrl, SpellCheckChettings

Use a custom tools file

ASP.NET MVCTelerik RadEditor

Page 8: MVC and Entity Framework 4

Setting <% RadEditor1.Content = Model.Description

%> Getting

Need to pass in the request and name of editor

ASP.NET MVCTelerik RadEditor Set and Get Content

var content = _radControlHelper.GetEditorContent(Request, “RadEditor1");

public string GetEditorContent(HttpRequestBase request, string editorId){ var rawContent = (from postedValue in request.Form.Keys.OfType<string>() where postedValue.EndsWith(editorId) select request.Form[postedValue]).FirstOrDefault();

return Telerik.Web.UI.Editor.ContentEncoder.Decode(rawContent);}

Page 9: MVC and Entity Framework 4

First version (V 1) came with .NET 3.5 SP1 August 2008 Not widely thought of by the community

Second version (V4) is set to be 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

Page 10: MVC and Entity Framework 4

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

Page 11: MVC and Entity Framework 4

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

Page 12: MVC and Entity Framework 4

Adding an EDM to your project

Demo

Page 13: MVC and Entity Framework 4

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

Page 14: MVC and Entity Framework 4

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

Page 15: MVC and Entity Framework 4

The context is the instance of the entity Passing an entity around to tiers breaks the

context V4 will handle this issue with “self-tracking”

entities

Make sure the context is always the same

Entity FrameworkContexts

Page 16: MVC and Entity Framework 4

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();

Page 17: MVC and Entity Framework 4

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();

}

Page 18: MVC and Entity Framework 4

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

Page 19: MVC and Entity Framework 4

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

Page 20: MVC and Entity Framework 4

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

Page 21: MVC and Entity Framework 4

Questions?

Page 22: MVC and Entity Framework 4

James [email protected], @latringo

Inland Empire .NET User’s Groupwww.iedotnetug.org2nd Tuesday’s of each month in Riverside

Thank you