Шаблон репозитория: Как мы можем загрузить данные в кучу из большой базы данных?
Я использую Generic Repository Pattern для моего недавнего проекта. Предположим, что моя таблица содержит 100000 записей, и если я загружаю все записи одновременно, это занимает слишком много времени. нижеприведенный метод вернет все записи.
public async Task<IEnumerable<T>> GetAll()
{
return await dbSet.ToListAsync();
}
Мой уровень пользовательского интерфейса все еще ожидает загрузки 100000 записей в память для привязки моего DOM в Jquery Datatable. Существует ли какой-либо механизм для автоматической загрузки 500 записей в каждом вызове, или я должен реализовать это в своем бизнес-уровне?
1 ответ
Начать с общего хранилища - это анти-паттерн. Пожалуйста, реализуйте конкретные репозитории над ним.
Вы явно не упомянули ORM; Исходя из кода, выглядит Entity Framework. Я отвечаю с точки зрения шаблона репозитория, как вы отметили; пренебрегая реализацией ORM.
По поводу вашего вопроса, вы должны рассмотреть вопрос о реализации нумерации страниц. Вы должны реализовать это как в своем хранилище, так и на бизнес-уровне.
Итак, ваша функция в репозитории выглядит примерно так:
public async Task<IEnumerable<T>> GetPage(int pageNumber, int recordsPerPage)
{
return await dbSet.....;//ORM implementation here
}
Пожалуйста, обратитесь к этому для реализации нумерации страниц с Entity Framework.
В целом, стоит отметить, что мы не используем репозиторий для получения запроса из базы данных. И мы используем другие механизмы для получения запроса из базы данных. Поэтому, на мой взгляд, не пытайтесь использовать репозиторий для получения запроса из базы данных. Если вы вынуждены использовать хранилище для получения запроса, вы фактически превращаете хранилище в DOA(объект доступа к данным). Наконец, если вы пытаетесь использовать танк для получения очереди, вы не можете использовать общий репозиторий. Вы должны использовать DbSet, чтобы получить индивидуальный запрос из базы данных. В книге
Скотт Миллет (Шаблоны, принципы и практики доменного управления)
Раздел репозитория - есть полная статья о Универсальном репозитории