@kofon
Я человек

Как использовать методы Include и AsNoTracking используя паттерн Репозиторий?

Мой текущий репозиторий выглядит примерно так:
class UserRepository : IRepository<User>  // User - сущность entity
{
  // контекст подключения к базе данных. Инициализируется в конструкторе
  private readonly EntityContext _ctx;

  public IQueryable<User> GetAll(){
    return _ctx.User;
  }
  // ещё методы Save (INSERT), Update, Delete,
  // но сейчас разбираем только выборку
  // ...
}

Так вот, метод GetAll() возвращает IQueryable а не DbSet, а это значит, что нельзя будет вызвать замечательные методы Include, AsNoTracking и др.

Объявить тип возвращаемого значения DbSet в методе GetAll() (в интерфейсе IRepository) означает привязаться к Entity фреймворку, чего мне (почему-то) не хочется. А может надо?

Что делают в данной ситуации?

(ИМХО, добавить во каждый репозиторий эти методы, ещё более плохая вещь)
  • Вопрос задан
  • 717 просмотров
Пригласить эксперта
Ответы на вопрос 1
@smozhaykin
Недавно начал изучать структуру nopcommerce. Там это реализовано следующим образом:

/// <summary>
        /// Gets a table
        /// </summary>
        public virtual IQueryable<T> Table
        {
            get
            {
                return this.Entities;
            }
        }

        /// <summary>
        /// Gets a table with "no tracking" enabled (EF feature) Use it only when you load record(s) only for read-only operations
        /// </summary>
        public virtual IQueryable<T> TableNoTracking
        {
            get
            {
                return this.Entities.AsNoTracking();
            }
        }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы