mvc and entity framework 4
DESCRIPTION
Slide deck presented to the San Diego .NET User Group on Tuesday, March 23, 2010TRANSCRIPT
ASP.NET MVC and Entity Framework
San Diego .NET User GroupTuesday, March 23, 2010
James Johnson
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?
An effort to help support local user groups by providing speakers
Telerik speakers bureau
Overview of ASP.NET MVC Overview of Entity Framework
Things that are cool Things to watch out for How to do it
Agenda
Demo
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
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
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);}
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
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 will handle 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
Questions?
James [email protected], @latringo
Inland Empire .NET User’s Groupwww.iedotnetug.org2nd Tuesday’s of each month in Riverside
Thank you