Существует несколько хороших блогов о том, как реализовать шаблон хранилища вместе с шаблоном единицы работы с использованием общих классов.Шаблон репозитория Framework Entity Framework почему бы не вернуть Iqueryable?
Implementing a Data Access Layer with Entity Framework 6.1
Implementing the Repository and Unit of Work Patterns
Идея заключается в том, чтобы определить общий интерфейс IRepository и класс Repository, который скрывает, как данные фактически обращались. Доступ к нему можно получить с помощью Entity Framework DbContext, или, может быть, репозиторий является сборкой памяти для модульного тестирования.
public interface public interface IRepository<T> where T : class
{
T GetById(int Id);
void DeleteById(int Id);
void Add(T entity);
void Update(T entity);
etc.
}
Довольно часто я вижу, что некоторые функции запроса добавляются, которые похожи на запрашиваемые и/или Перечислимые функции.
Например, в Implementing a data access layer я вижу:
/// Returns an IEnumerable based on the query, order clause and the properties included
/// <param name="query">Link query for filtering.</param>
/// <param name="orderBy">Link query for sorting.</param>
/// <param name="includeProperties">Navigation properties seperated by comma for eager loading.</param>
/// <returns>IEnumerable containing the resulting entity set.</returns>
IEnumerable<T> GetByQuery(Expression<Func<T, bool>> query = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, string includeProperties = "");
/// <summary>
/// Returns the first matching entity based on the query.
/// </summary>
/// <param name="predicate"></param>
/// <returns></returns>
T GetFirst(Expression<Func<T, bool>> predicate);
Если интерфейс имел функцию IQueryable GetQuery(), то я бы не сделать такие функции, как GetFirst() и GetByQuery().
Вопрос: Почему это не рекомендуется? Могут ли люди изменить данные нежелательным образом?
Эй, это скопируйте текст из этого блога: https://programmingwithmosh.com/entity-framework/common-mistakes-with-the-repository-pattern/. Вы должны были упомянуть, что информация «заимствована» -))) –