Ho alcuni problemi con EF-Core che sto cercando di capire.
Uso il codice di avvio nell'applicazione MVC Core per inizializzare il contesto db.
Questo è il mio contesto DB:
public class AccountsDBContext : DbContext
{
public AccountsDBContext(DbContextOptions<AccountsDBContext> options)
:base(options)
{
}
// ...
}
E il codice di avvio:
public void ConfigureServices(IServiceCollection services)
{
// Inject the account db
services.AddDbContext<AccountsDBContext>(options =>
options.UseMySQL(Configuration.GetConnectionString("AccountsStore")));
// ...
In tutti gli esempi vedo che il DB Contesto è distribuito tramite il costruttore al controller (presumo per iniezione di dipendenza) e da lì ad altre entità \ layer.
[Route("api/[controller]")]
public class AccountsController : Controller
{
private AccountsDBContext _db;
public AccountsController(AccountsDBContext context)
{
this._db = context;
}
Tuttavia, non mi piace molto l'idea che il contesto db sarà un membro del controller.
Preferisco davvero ottenere una sospensione del contesto db nel livello di accesso ai dati invece di farlo passare nelle classi repository.
C'è un modo per ottenere il contesto all'interno del livello di accesso ai dati? (Non esiste IServiceCollection, IApplicationBuilder, IServiceScopeFactory, per quanto ne so)
Iniettare l'implementazione del repository / DAL nel controller e inserire DbContext nel costruttore del repository. Il contenitore DI aggancia tutto fino a quando vengono registrate le classi appropriate