關於如何使用泛型類與工作單元模式一起實現存儲庫模式,有幾個很好的博客。實體框架存儲庫模式爲什麼不返回Iqueryable?
Implementing a Data Access Layer with Entity Framework 6.1
Implementing the Repository and Unit of Work Patterns
理念是,定義一個通用接口IRepository和類信息庫,它隱藏該數據實際上是如何訪問。它可以使用實體框架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/。 你應該提到這個信息「借」 - ))) –