我试图创建一个连接到多个数据库的.NET核心应用程序,但使用一个包含所有CRUD操作逻辑的通用存储库。实现此目标的最佳方法是什么?
public Repository(ApplicationDbContext dbContext)
{
_dbContext = dbContext;
_set = _dbContext.Set<T>();
}
上面是我的存储库的构造函数。在这里,我注入了ApplicationDbContext。我正在寻找一种使该ApplicationDbContext通用的方法,因此我只需要一个存储库,在其中可以注入不同的上下文来访问多个数据库。本质上,我正在寻找这样的东西:
public class Repository_1<T> where T:EntityBase
{
public Repository_1(IDbContext dbContext)
{
}
}
我可以在其中换出dbContext并将其替换为连接到另一个数据库的另一个上下文。
最佳答案
您可以为存储库设置两个参数,并在其上添加约束,假设您的dbContext继承自DbContext
public class TestRepository<TContext, T> : ITestRepository<TContext,T>
where TContext : DbContext
where T : BaseEntity
{
private readonly TContext _context;
private DbSet<T> entities;
public TestRepository(TContext context)
{
_context = context;
entities = context.Set<T>();
}
public List<T> GetAll()
{
return entities.AsNoTracking().ToList();
}
}
ITestReposiroty:
public interface ITestRepository<TContext,T>
where TContext : DbContext
where T : BaseEntity
{
List<T> GetAll();
}
启动文件
services.AddScoped(typeof(ITestRepository<,>), typeof(TestRepository<,>));
控制器:
public class ProductsController : ControllerBase
{
private readonly ITestRepository<ApplicationDbContext, Product> _repository;
public TestRepoController(ITestRepository<ApplicationDbContext, Product> repository)
{
_repository = repository;
}
// GET api/products
[HttpGet]
public List<Product> Get()
{
return _repository.GetAll();
}
}
关于c# - 通过Entity Framework Core将多个数据库连接到.NET Core项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58123230/