ASP.NET中DatabaseContext的实体框架依赖注入

anhgbhbe  于 2023-02-01  发布在  .NET
关注(0)|答案(1)|浏览(150)

我没有太多关于Asp和实体框架的知识,所以我真的不知道我必须做什么。我的问题是访问主asp方法之外的数据库上下文-这是如何在programidocs(Main)中创建和使用db上下文的

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<DatabaseContext>(
    options => options.UseSqlite(builder.Configuration.GetConnectionString("DefaultDataSource"))
);

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var context = services.GetRequiredService<DatabaseContext>();
    context.Database.EnsureCreated();
}

所以我的问题是我在“builder.Configuration”之外为DatabaseContext构造函数设置“选项”
但是当我需要从其他脚本访问数据库时,我该怎么做呢?DatabaseContext需要配置,但我不知道如何在构建器之外获得它。一个家伙建议我使用依赖注入,我已经看过了,但我就是不知道如何正确地做,就像我创建了一个类,在那里初始化数据库上下文,但是我仍然需要在这里做一个配置,我真的不知道怎么做。这可能是一个非常愚蠢的问题,但是我真的不能在几天内弄清楚:D
我试过在没有配置的情况下创建DbContext,但它给出了错误

k10s72fa

k10s72fa1#

我不知道你试了什么,但我想这可能是你想要的。
假设您的DatabaseContext类是最基本的,并且在其中定义了一个表Users

public class DatabaseContext : DbContext
{
    public DatabaseContext(DbContextOptions<DatabaseContext> options)
        : base(options)
    {
    }

    public DbSet<Models.User> Users { get; set; }
}

然后将其注册到Program.cs中:

builder.Services.AddDbContext<DatabaseContext>(
    options => options.UseSqlite(builder.Configuration.GetConnectionString("DefaultDataSource"))
);

您可以通过迁移和更新数据库来生成您的数据库(当然您也可以手动创建):

Add-Migration InitialCreate
Update-Database

然后,您可以通过依赖注入访问其他类中的数据库,例如在控制器中:

public class HomeController : Controller
{
    private readonly DatabaseContext _databaseContext;
    public HomeController(DatabaseContext databaseContext)
    {
        _databaseContext = databaseContext;
    }
    public IActionResult Index()
    {
        var user = _databaseContext.Users.ToList();
        return View();
    }
}

有关依赖注入的更多细节,可以参考this document

相关问题