簡體   English   中英

Asp.Net 上 DatabaseContext 的 EntityFramework 依賴注入

[英]EntityFramework dependency injection of DatabaseContext on Asp.Net

我對 Asp 和 Entity Framework 了解不多,所以我真的不知道我必須做什么。 我的問題是從主要的 asp 方法訪問數據庫上下文 - 在 Program.cs(主要)中創建和使用數據庫上下文的方式

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 需要配置,但我只是不知道如何在該構建器之外獲取它。 一個人建議我使用依賴注入,我看過了,但我就是不知道如何正確地做到這一點,就像我創建了一個 class 來初始化數據庫上下文,但我仍然需要以某種方式在這里進行配置,我真的不知道如何。 這可能是一個非常愚蠢的問題,但我真的幾天都弄不明白:D

我試過在沒有配置的情況下制作 DbContext 但它給出了錯誤

我不知道你試過什么,但我想這可能就是你想要的。

假設你的DatabaseContext class是最基本的,並且在里面定義了一個表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

然后你可以通過依賴注入在其他類中訪問你的數據庫,比如在controller:

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

有關依賴注入的更多詳細信息,您可以參考此文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM