Как реализовать «GenericRepository» для реализации объектов на уровне SQL Linq?Я работаю на MVC - PullRequest
0 голосов
/ 08 января 2012

Мне нужно реализовать общий репозиторий (многократно используемый .dll) для применения операций (например, обновление, вставка, удаление, поиск), сохраняя тот факт, что мы можем делать сложные запросы из базы данных, содержащей несколько объединений и сложностей.

Я так делаю

public class GenericRepository<TEntity> where TEntity : class
{
//internal SchoolContext context; which context I need to use to behav as generic(.dll)
internal DbSet<TEntity> dbSet;

   public GenericRepository(SchoolContext context) //that won't be this context
   {
        this.context = context;
        this.dbSet = context.Set<TEntity>();
   }
   .... public virtual void Insert(TEntity entity){..}
   .... public virtual void Delete(TEntity entityToDelete){..}
   .... public virtual void Update(TEntity entityToUpdate){..}
 }

Итак, в каком контексте, чтобы как-то добиться той же работы DBContexts (т. Е. Взаимодействовать с БД из объектов, использующих LINQ)?

Во-вторых, Я использую некоторые конкретные классы (в случае, когда этот общий репозиторий не удовлетворяет моим рабочим требованиям), например, какой-то огромный сложный запрос. как

  class StudentRepository : GenericRepository
  {

  }
  class PersonRepository : GenericRepository
  {

  }

... Является ли этот способ правильным или доступна какая-то другая хорошая реализация?

С уважением Усман

1 Ответ

2 голосов
/ 08 января 2012

Использование определенного репозитория является правильным способом, потому что он инкапсулирует определенную логику доступа к данным для данного типа объекта / совокупного корня. Использование самого репозитория не является правильным способом, потому что не приносит никакого дополнительного значения . Это просто оболочка для EF DbSet, которая уже является "универсальным хранилищем" , и у нее все еще есть проблемы, связанные с IDbSet / DbSet. Если ваша основная цель - сделать ваш код тестируемым , вы не достигнете этого с помощью общего репозитория , предоставляющего IQueryable (чтобы разрешить сложные запросы и объединения, не скрытые хранилищем).

...