我正在寻找完整的 ef 存储库接口(interface)(和实现)。我有这个:
public interface IRepository<T> where T: class
{
IQueryable<T> GetQuery();
IEnumerable<T> GetAll();
IEnumerable<T> Find(Func<T, bool> where);
T Single(Func<T, bool> where);
T First(Func<T, bool> where);
void Delete(T entity);
void Add(T entity);
void Attach(T entity);
void SaveChanges();
}
我正在寻找所有方法的接口(interface),包括 SingleOrDefault 等等。
我在哪里可以找到这样的东西?
最佳答案
有两种定义存储库的方法。首先是公开 IQueryable,它足以做任何事情:
public interface IRepository<T> where T: class
{
IQueryable<T> GetQuery();
// This method requires additional knowledge about entity
// or more compilcated approach. The point of the method
// is to check EF's internal storage first before querying DB
// T GetById(int Id);
void Delete(T entity);
void Add(T entity);
void Attach(T entity);
}
GetAll
或 First
之类的东西是多余的,因为 GetQuery
提供所有服务。第二种方法是不公开 IQueryable
的特定存储库:
public interface IRepository<T> where T : class
{
IEnumerable<T> GetAll();
// Expressions!!!! Func will load all items to memeory
// and then perform filtering by linq-to-objects!!!!!!
IEnumerable<T> Find(Expression<Func<T, bool>> where);
T Single(Expression<Func<T, bool>> where);
T First(Expression<Func<T, bool>> where);
void Delete(T entity);
void Add(T entity);
void Attach(T entity);
}
然后第二个版本由具体的存储库接口(interface)派生,这些接口(interface)添加了 GetXXXOrderedByName、GetXXXWithRelatedYYY 等方法。
另一点是 SaveChanges
通常不是存储库的一部分,因为您可能需要修改多个存储库中的项目并通过单一方法保存所有更改。为此,存在另一种模式 - 工作单元。
关于c# - 完整的 Entity Framework 存储库接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5774053/