【问题标题】:EF generic repository to any data provider任何数据提供者的 EF 通用存储库
【发布时间】:2013-03-13 09:12:50
【问题描述】:
我正在尝试使我的 EF 通用存储库更“宽”,以便与任何数据提供程序 (ORM) (如 EF、NHibernate、Amazon Services 等)一起使用,而无需绑定到 EF 上下文。
现在我有(要点链接):
我已经重写了IRepository 和Repository 的一部分。
但不知道如何处理 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
}