appsettings.Development.json
{ "DetailedErrors": true, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning", "Microsoft.Hosting.Lifetime": "Information", "Microsoft.EntityFrameworkCore.Database.Command": "Information" } } }
Database access
using var context = new MyContext(); return await context.MyEntities.ToListAsync();
if (Loading) { return; } try { Loading = true; ... } finally { Loading = false; }
New DbContext instances
builder.Services.AddDbContextFactory<ContactContext>(opt => opt.UseSqlite($"Data Source={nameof(ContactContext.ContactsDb)}.db"));
private async Task DeleteContactAsync() { using var context = DbFactory.CreateDbContext(); Filters.Loading = true; if (Wrapper is not null && context.Contacts is not null) { var contact = await context.Contacts .FirstAsync(c => c.Id == Wrapper.DeleteRequestId); if (contact is not null) { context.Contacts?.Remove(contact); await context.SaveChangesAsync(); } } Filters.Loading = false; await ReloadAsync(); }
Scope to the component lifetime
@implements IDisposable @inject IDbContextFactory<ContactContext> DbFactory
public void Dispose() { Context?.Dispose(); }
protected override async Task OnInitializedAsync() { Busy = true; try { Context = DbFactory.CreateDbContext(); if (Context is not null && Context.Contacts is not null) { var contact = await Context.Contacts.SingleOrDefaultAsync(c => c.Id == ContactId); if (contact is not null) { Contact = contact; } } } finally { Busy = false; } await base.OnInitializedAsync(); }
References
https://docs.microsoft.com/en-us/aspnet/core/blazor/blazor-server-ef-core?view=aspnetcore-6.0