【问题标题】:EF generic repository to any data provider任何数据提供者的 EF 通用存储库
【发布时间】:2013-03-13 09:12:50
【问题描述】:

我正在尝试使我的 EF 通用存储库更“宽”,以便与任何数据提供程序 (ORM) (如 EF、NHibernate、Amazon Services 等)一起使用,而无需绑定到 EF 上下文。

现在我有(要点链接):

我已经重写了IRepositoryRepository 的一部分。

但不知道如何处理 EF 以及最终如何摆脱它。

您能否给我一些文章或代码示例,以便在我的工作中找到正确的方向。

【问题讨论】:

    标签: c# orm repository-pattern n-tier-architecture


    【解决方案1】:

    IRepository id 的想法是为 Repository 中的每个 ORM实现不同的实现。这样您就不必根据 ORM 本身来构建您的解决方案。

    那么我认为当你试图让你的存储库来处理许多 ORM 时你做错了

    更新:

    您应该根据 IRepository 构建您的 BLL,而不需要对实现一无所知,然后您可以使用构造函数注入或依赖解析器将合适的实现传递给 BLL。

    例如

    public interface IProductRepository{
       void AddProduct(Product model);
       void UpdateProduct(Product model);
    }
    

    EF 实现:

    public class ProductRpository : IProductRepository
    {
       void AddProduct(Product model)
       {
          //Add any code you want maybe EF code.
       }
       void UpdateProduct(Product model)
       {
          //........
       }
    }
    

    然后在 BLL 中,您依赖于 ProductRepository 上的 IProductRepository :

    public class ProductService
    {
       private readonly IProductRepository repository
       public ProductService(IProductRepository repository){
          this.repository = repository
       }
    // ........ the code of your BLL
    }
    

    【讨论】:

    • 所以我需要 EfRepository、NhRepository 等等?如果我同时需要 ef 和 nhibernate,我将如何在我的 BLL 中调用它?现在我只使用gist.github.com/maksii/5150547
    • @MaksMartynov 查看我的更新 :)
    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 2011-04-22
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多