Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
MVC and Entity Framework 4
1. ASP.NET MVC and Entity Framework San Diego .NET User Group Tuesday, March 23, 2010 James Johnson
2. 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?
3. An effort to help support local user groups by providing speakers Telerik speakers bureau
4. Overview of ASP.NET MVC Overview of Entity Framework Things that are cool Things to watch out for How to do it Agenda
6. 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
7. Hey! There’s a big honking server control there! Using the TelerikRadEditor 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 MVCTelerikRadEditor
8. Setting <% RadEditor1.Content = Model.Description %> Getting Need to pass in the request and name of editor ASP.NET MVCTelerikRadEditor Set and Get Content varcontent = _radControlHelper.GetEditorContent(Request, “RadEditor1"); public string GetEditorContent(HttpRequestBase request, string editorId) { varrawContent = (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); }
9. 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
10. 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
11. 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
13. 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) { varthingItems = thing.ThingItems } Entity FrameworkLazy Loading
14. Use if you will be needing every related entity List<Thing> things = context.Things.Include(“ThingItems”); foreach(var thing in things) { varthingItems = thing.ThingItems } Entity FrameworkEager Loading
15. 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
16. Entity FrameworkContexts public class ModelHelper { private static CourseEntities _db; public static CourseEntitiesCourseEntities { get { if(_db == null) _db = new CourseEntities(); return _db; } set { _db = value; } } } private readonlyCourseEntities _db = new CourseEntities();
17. 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) { varnewStudent = GetStudent(student.Id); varnewCourse = GetCourse(course.Id); newStudent.Courses.Add(newCourse); _db.SaveChanges(); }
18. 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 FrameworkLINQ to Entities
19. 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 FrameworkLINQ to Entities
20. 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
22. James Johnson james@iedotnetug.org www.duringlunch.com Twitter, @latringo Inland Empire .NET User’s Group www.iedotnetug.org 2nd Tuesday’s of each month in Riverside Thank you