c# - 完整的 Entity Framework 存储库接口(interface)

标签 c# .net entity-framework repository-pattern

我正在寻找完整的 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);
}

GetAllFirst 之类的东西是多余的,因为 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/

相关文章:

c# - Metro 框架中 Tab 按钮组合框的尴尬行为

c# - 如何在具有良好调用语法的 LINQ 中实现 NotOfType<T>?

.net - 如何在窗口显示前计算 ActualWidth ActualHeight

.net - NUnit API 和以编程方式运行测试

.net - 如何使用 .NET 进行全双工编程?

entity-framework - Entity Framework 中的可插入约定

c# - SQL 服务器 : way to see final query with filled parameters

c# - 没有默认数据库时的 Entity Framework 6 和迁移

asp.net-mvc - 在多个 ASP.NET MVC 2 项目之间共享数据模型和控件的最佳方式

entity-framework - Azure Function 启动中的 EF Core 迁移