Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
ASP.NET MVC and Entity Framework 4
1. ASP.NET MVC and Entity Framework
Desert Code Camp
Saturday, November 13, 2010
James Johnson
Technical Evangelist
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. • 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
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. • 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. • 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. • 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
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. 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. • 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. 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. 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. • 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. 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. 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. • 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
20. using GenericRepository
public class MyController
{
private readonly IGenericRepository _repo;
private readonly CourseEntities _db;
public MyController()
{
_repo = new EFGenericRepository.EFGenericRepository(_db);
}
}
Repositories