我可以将 DbContext 作为接口或委托传递吗
Can i Pass DbContext as interface or delegate
我有两个 dbcontext 所以想通过一些函数传递它所以我可以在两个 dbcontext 之间切换或者我必须更改所有 api controller
public class AccountClassesController : ControllerBase
{
private readonly ApplicationDbContext _context;
public AccountClassesController(ApplicationDbContext context)
{
_context = context;
}
// GET: api/AccountClasses
[HttpGet]
public async Task<ActionResult<IEnumerable<AccountClass>>> GetAccountClass()
{
return await _context.AccountClass.ToListAsync();
}
不想从控制器调用 ApplicationDbContext,通过某些函数或其他方式调用它
我现在已经为 postgresql 和 sqlserver 实现了数据库连接,每个都首先在代码中创建了不同类型的迁移,所以必须创建两个 dbcontext,现在我想当我使用 postgresql 或 sql server
时能够在 dbcontext 之间切换
您可以在此处查看此答案 is it a good practice to pass an EF DbContext as delegate in services to attach all changes on it。
但是,如果您的应用程序没有任何性能问题,即使您实例化了新的上下文,也没有问题,因为 EF 的管理和构建速度非常快。
是的,您可以创建接口并修改您的 ApplicationDbContext 来实现。
界面
public interface IAccountClass {
Task<IEnumerable<AccountClass>> GetAccountClass();
}
public class AppDbContext: DbContext, IAccount {
/* implementing interface
*/
public Task<IEnumerable<AccountClass>> GetAccountClass() {
return this.AccountClass.ToListAsync();
}
}
在您的控制器中注入 DbContext 实例转换为接口:
public AccountClassesController(IAccountClass accountClass)
{
_accountClass = accountClass;
}
// GET: api/AccountClasses
[HttpGet]
public async Task<ActionResult<IEnumerable<AccountClass>>> GetAccountClass()
{
return await this._accountClass.GetAccountClass();
}
您必须配置依赖项注入框架以将新的 ApplicationDbContext 作为 IAccountClass 注入。
我有两个 dbcontext 所以想通过一些函数传递它所以我可以在两个 dbcontext 之间切换或者我必须更改所有 api controller
public class AccountClassesController : ControllerBase
{
private readonly ApplicationDbContext _context;
public AccountClassesController(ApplicationDbContext context)
{
_context = context;
}
// GET: api/AccountClasses
[HttpGet]
public async Task<ActionResult<IEnumerable<AccountClass>>> GetAccountClass()
{
return await _context.AccountClass.ToListAsync();
}
不想从控制器调用 ApplicationDbContext,通过某些函数或其他方式调用它
我现在已经为 postgresql 和 sqlserver 实现了数据库连接,每个都首先在代码中创建了不同类型的迁移,所以必须创建两个 dbcontext,现在我想当我使用 postgresql 或 sql server
时能够在 dbcontext 之间切换您可以在此处查看此答案 is it a good practice to pass an EF DbContext as delegate in services to attach all changes on it。 但是,如果您的应用程序没有任何性能问题,即使您实例化了新的上下文,也没有问题,因为 EF 的管理和构建速度非常快。
是的,您可以创建接口并修改您的 ApplicationDbContext 来实现。
界面
public interface IAccountClass {
Task<IEnumerable<AccountClass>> GetAccountClass();
}
public class AppDbContext: DbContext, IAccount {
/* implementing interface
*/
public Task<IEnumerable<AccountClass>> GetAccountClass() {
return this.AccountClass.ToListAsync();
}
}
在您的控制器中注入 DbContext 实例转换为接口:
public AccountClassesController(IAccountClass accountClass)
{
_accountClass = accountClass;
}
// GET: api/AccountClasses
[HttpGet]
public async Task<ActionResult<IEnumerable<AccountClass>>> GetAccountClass()
{
return await this._accountClass.GetAccountClass();
}
您必须配置依赖项注入框架以将新的 ApplicationDbContext 作为 IAccountClass 注入。