Общий шаблон репозитория с шаблоном UnitOfWork

Я пытаюсь реализовать общий шаблон репозитория. Я нашел этот сайт, который, я думаю, хорошо объяснил.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();
        }
    }
}

5
задан Jonathan 3 July 2012 в 08:11
поделиться