I have shown in last couple of posts how to use
1. MVCScaffolding to scaffold your MVC 4 project with Razor View Engine,
2. Use the Migration tool to use code first approach.
I still want to show you how to use the repository pattern using the Scaffolding technique
Here is the outline of what we are doing.
- Installing MvcScaffolding
- Scaffold each model
On your project from the last post run the following command on your package manager console
PM> Install-Package MvcScaffolding
This will install all the necessary component for the MvcScaffolding for the project.
Now run following for each model
PM> Scaffold Repository Role
PM> Scaffold Repository user
PM> Scaffold Repository UserRole
Here is an example of the repository what it will look like
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Linq.Expressions;
using System.Web;
namespace TestService.Models
{
public class RoleRepository : IRoleRepository
{
AuthenticationContext context = new AuthenticationContext();
public IQueryable<Role> All
{
get { return context.Roles; }
}
public IQueryable<Role> AllIncluding(params Expression<Func<Role, object>>[] includeProperties)
{
IQueryable<Role> query = context.Roles;
foreach (var includeProperty in includeProperties) {
query = query.Include(includeProperty);
}
return query;
}
public Role Find(int id)
{
return context.Roles.Find(id);
}
public void InsertOrUpdate(Role role)
{
if (role.Id == default(int)) {
// New entity
context.Roles.Add(role);
} else {
// Existing entity
context.Entry(role).State = EntityState.Modified;
}
}
public void Delete(int id)
{
var role = context.Roles.Find(id);
context.Roles.Remove(role);
}
public void Save()
{
context.SaveChanges();
}
public void Dispose()
{
context.Dispose();
}
}
public interface IRoleRepository : IDisposable
{
IQueryable<Role> All { get; }
IQueryable<Role> AllIncluding(params Expression<Func<Role, object>>[] includeProperties);
Role Find(int id);
void InsertOrUpdate(Role role);
void Delete(int id);
void Save();
}
}
This will create all 3 repositories for the models under the model folder. You will see one more file that is [your project name]Context,
if you already have a context file remove this file and on each repository replace this file type with your class name.
Now build the project and you just implemented the repository pattern.