Я пытаюсь реализовать общий шаблон репозитория. Я нашел этот сайт, который, я думаю, хорошо объяснил.http://www.tugberkugurlu.com/archive/generic-repository-pattern-entity-framework-asp-net-mvc-and-unit-testing-triangle
Моя цель — сэкономить разработчикам время и количество нажатий клавиш, и я знаю, что это поможет мне.
Итак, у меня есть 2 вопроса:
1. Хороший это подход или нет, будут ли у меня какие-то проблемы в будущем?
2. Как я могу объединить его с шаблоном Unitofwork? Конечно, я не могу создать экземпляр абстрактного класса, поэтому следующий код недействителен.
public class UnitOfWork : IDisposable
{
#region Private fields
private readonly MyCompanyContext _context = new MyCompanyContext();
private GenericRepository _taskRepository;
public GenericRepository TaskRepository
{
get
{
return _taskRepository ??
(_taskRepository = new GenericRepository());
}
}
namespace MyCompany.DAL.Repository
{
public interface IGenericRepository where T : class
{
IQueryable GetAll();
IQueryable FindBy(Expression> predicate);
void Add(T entity);
void Delete(T entity);
void Edit(T entity);
void Save();
}
public abstract class GenericRepository :
IGenericRepository
where T : class
where C : DbContext, new()
{
private C _entities = new C();
public C Context
{
get { return _entities; }
set { _entities = value; }
}
public virtual IQueryable GetAll()
{
IQueryable query = _entities.Set();
return query;
}
public IQueryable FindBy(System.Linq.Expressions.Expression> predicate)
{
IQueryable query = _entities.Set().Where(predicate);
return query;
}
public virtual void Add(T entity)
{
_entities.Set().Add(entity);
}
public virtual void Delete(T entity)
{
_entities.Set().Remove(entity);
}
public virtual void Edit(T entity)
{
_entities.Entry(entity).State = System.Data.EntityState.Modified;
}
public virtual void Save()
{
_entities.SaveChanges();
}
}
}