【发布时间】:2022-01-06 22:59:58
【问题描述】:
我使用 Microsoft's minimal Web API tutorial located here 在 Visual Studio 2022 中成功创建了一个最小的 C# ASP.NET Core 6.0 Web API 项目。
在本教程中,作者使用内存中的实体框架数据库。我想在程序启动时用假数据植入数据库。
我不确定在哪里或如何访问我的DbContext 以在数据库中播种初始数据。作者指出,“DI 容器提供对数据库上下文和其他服务的访问。”这是正确的,但我想访问 Map 方法范围之外的 DbContext(app.MapGet、app.MapPost 等)
应用程序启动时我该如何做这样的事情?
db.ToDoEntities.AddRange(new List<ToDoEntity>
{
new ToDoEntity
{
Name = "Code",
IsComplete = false
},
new ToDoEntity
{
Name = "Game",
IsComplete = false
},
new ToDoEntity
{
Name = "Sleep",
IsComplete = false
}
});
db.SaveChanges();
这是我目前的代码:
// ToDoDbContext.cs
using Microsoft.EntityFrameworkCore;
namespace ToDo.Api;
public class ToDoDbContext : DbContext
{
public ToDoDbContext(DbContextOptions<ToDoDbContext> options) : base(options) { }
public DbSet<ToDoEntity> ToDoEntities => Set<ToDoEntity>();
}
// ToDoEntity.cs
namespace ToDo.Api;
public class ToDoEntity
{
public int Id { get; set; }
public string Name { get; set; } = "";
public bool IsComplete { get; set; }
}
// Program.cs
using Microsoft.EntityFrameworkCore;
using ToDo.Api;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddDbContext<ToDoDbContext>(options => options.UseInMemoryDatabase("ToDoList"));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
var app = builder.Build();
// Example GET end-point.
app.MapGet("/to-do-items", async (ToDoDbContext db) => await db.ToDoEntities.ToListAsync());
// All other map operations here. See the tutorial for the full code.
app.Run();
【问题讨论】:
标签: c# asp.net-core asp.net-web-api asp.net-core-webapi