Вы уверены, что являетесь единственным пользователем данных?Другими словами, вы уверены, что данные не меняются между двумя использованиями вашего dbContext?
Более того: вы уверены, что ваш dbContext всегда будет использоваться таким образом, или это может быть в будущем этот dbContextможет быть подключен к реальной базе данных?
Если ваш поток будет единственным пользователем, сейчас и в будущем, то при повторном использовании DbContext не будет большого вреда.Однако имейте в виду, что не гарантируется, что данные действительно будут записаны до того, как вы утилизируете dbContext.Более того: ваш dbContext будет хранить все извлеченные данные в локальной памяти, поэтому через некоторое время у вас будет полная база данных в локальной памяти.
Рассмотрите возможность использования шаблона хранилища, где вы скрываете, как данные сохраняются, хранилищешаблон знает немного больше о том, для чего используется ваш репозиторий, и может принимать более взвешенные решения о том, какие данные хранить в памяти и какие данные запрашивать из вашей базы данных с помощью нового dbContext.
Например, если у вас естьбаза данных со школами, студентами и учителями, и вы часто запрашиваете их данные, но редко запрашиваете данные ушедших в отставку учителей и данные о выпускниках, ваш репозиторий может хранить в памяти все извлеченные не вышедшие на пенсию / законченные учителя / учащиеся и создавать только свежие данныеdbContext для извлечения неизвестных данных, извлечения данных об устаревших / оконченных программах или обновления базы данных
interface IRepositorySet<Tentity> : IEnumerable<Tentity>
where Tentity : class, new()
{
Tentity Add(Tentity entity);
Tentity Update(Tentity entity);
Tentity Delete(Tentity entity);
}
interface ISchoolsRepository
{
// for simple queries / add / update / remove only
IRepositorySet<School> Schools {get;}
IRepositorySet<Teacher> Teachers {get;}
IRepositorySet<Student> Students {get;}
}
RepositorySet знает, какой dbContext создать, когда ему нужны данные.Все часто выбираемые элементы будут храниться в памяти в Словаре с первичным ключом.
При создании словарь заполняется всеми первичными ключами и значением null, что указывает на то, что элемент еще не выбран.
Когда запрашиваются данные, RepositorySet сначала выбирает данные из словаря.Все элементы, которые все еще имеют нулевое значение, будут извлечены из нового dbContext и помещены в словарь.
Обратите внимание, что это не будет работать для огромных объемов данных.Рассматривайте это решение только в том случае, если считаете, что можете хранить все извлеченные данные в памяти.Но опять же: сохранение открытого dbContext также сохранит все извлеченные данные в памяти.