Click here to Skip to main content
15,887,350 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
Hi,
I am implementing Repository Pattern in one of my project based on ASP.NET MVC4 and N-Tier Architecture. I am little confused as how to implement Custom Membership with Repository Pattern. Here are how I have implemented my classes so far. For posting purpose all < are replaced with [ and > are replaced with ]

Generic Repository

public interface IRepository[T] where T : class
{
void Add(T entity);
void Delete(T entity);
void Update(T entity);
IQueryable[T] GetAll();
T FindBy(Expression[Func[T, bool]] expression);
IQueryable[T] FilterBy(Expression[Func[T, bool]] expression);
}

Repository Base Class

public abstract class Repository[T] : IRepository[T] where T : class
{
private STNDataContext _stnDataContext;
private readonly IDbSet[T] _dbSet;
protected Repository(IDatabaseFactory databaseFactory)
{
DatabaseFactory = databaseFactory;
_dbSet = StnDataContext.Set[T]();
}
protected IDatabaseFactory DatabaseFactory { get; private set; }
public STNDataContext StnDataContext
{
get { return _stnDataContext ?? (_stnDataContext = new STNDataContext()); }
}
public void Add(T entity)
{
_dbSet.Add(entity);
_stnDataContext.Commit();
}
public void Delete(T entity)
{
_dbSet.Remove(entity);
}
public void Update(T entity)
{
_dbSet.Attach(entity);
_stnDataContext.Entry(entity).State = EntityState.Modified;
_stnDataContext.Commit();
}
public IQueryable[T] GetAll()
{
return _dbSet.ToList().AsQueryable();
}
public T FindBy(Expression[Func[T, bool]] expression)
{
return FilterBy(expression).SingleOrDefault();
}
public IQueryable[T] FilterBy(Expression[Func[T, bool]] expression)
{
return GetAll().Where(expression).AsQueryable();
}

User Repository Interface

public interface IUserRepository : IRepository[User]
{
}

User Repository

public class UserRepository : Repository[User], IUserRepository
{
public UserRepository(IDatabaseFactory databaseFactory)
: base(databaseFactory)
{
}
}

Heres my Business Logic Layer
Generic Service Interface



public interface IService[T]
{
void Add(T entity);
void Delete(T entity);
void Update(T entity);
IEnumerable[T] GetAll();
T FindBy(Expression[Func[T, bool]] expression);
IEnumerable[T] FilterBy(Expression[Func[T, bool]] expression);
}

Service Base

public class Service[T] : IService[T] where T : class
{
public void Add(T entity)
{
throw new NotImplementedException();
}
public void Delete(T entity)
{
throw new NotImplementedException();
}
public void Update(T entity)
{
throw new NotImplementedException();
}
public IEnumerable[T] GetAll()
{
throw new NotImplementedException();
}
public T FindBy(Expression[Func[T, bool]] expression)
{
throw new NotImplementedException();
}
public IEnumerable[T] FilterBy(Expression[Func[T, bool]] expression)
{
throw new NotImplementedException();
}
}

User Service Interface

public interface IUserService : IService[User]
{
}

User Service Implementation

public class UserService : Service[User], IUserService
{
private readonly IUserRepository _userRepository;
private readonly IRoleRepository _roleRepository;
public UserService(IUserRepository userRepository, IRoleRepository roleRepository)
{
_userRepository = userRepository;
_roleRepository = roleRepository;
}
public IList[User] GetAllUsers()
{
return _userRepository.GetAll().ToList();
}
public User GetUser(int id)
{
return _userRepository.FindBy(x =] x.UserId == id);
}
public User GetUser(string userName)
{
return _userRepository.FindBy(x =] x.Username.Equals(userName));
}
public void CreatUser(User user)
{
_userRepository.Add(user);
}
public IList[User] GetUsersForRole(string roleName)
{
return _userRepository.FilterBy(x =] x.Role.RoleName.Equals(roleName)).ToList[User]();
}
public IList[User] GetUsersForRole(int roleId)
{
return _userRepository.FilterBy(x =] x.Role.RoleId == roleId).ToList[User]();
}
public IList[User] GetUsersForRole(Role role)
{
return GetUsersForRole(role.RoleId);
}
}

I am not very sure on Am I going the right way? If yes how do i implement my UserService class.
If no, what changes do i need to implement.
Any help on this is highly appreciable. Thanks in advance
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900