gpt4 book ai didi

c# - 有没有更好的方法将 dbcontext 添加到 Asp.core MVC Controller ?

转载 作者:行者123 更新时间:2023-12-04 00:00:41 25 4
gpt4 key购买 nike

在新的 MVC 核心中,似乎将上下文获取到 Controller 的标准方法是这样做

public class BaseController : Controller
{

public readonly ReportDBContext _db;

public BaseController(ReportDBContext db)
{
_db = db;
}
}

然后我可以使用
public class HomeController : BaseController
{

public HomeController(ReportDBContext db) : base(db) { }
}

在所有其他 Controller 中使这更容易一些。
通常在 Asp.net MVC 中,我可以随时使用 new ReportDBContext() 获取上下文。

现在有没有类似的方法,还是我必须在 asp.core MVC 的所有 Controller 中都有上下文?

最佳答案

感谢 @mm8的回答,如果你决定使用依赖注入(inject),那么你可以按照下面提到的步骤。

假设您已经定义了 ReportDBContext像这样:

public class ReportDBContext : DbContext
{
public DbSet<Sample> Samples { get; set; }
//...

public ReportDBContext(DbContextOptions<ReportDBContext> options) : base(options)
{
//...
}
}

所以你需要配置你的 startup.cs像这样:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
//...What needed
services.AddDbContext<ReportDBContext>(options => options.UseSqlServer("Connection string to your DB"));
//...What needed
}
//...
}

因此,您可以轻松注入(inject)您的 ReportDBContext像这样给你的类(例如将它注入(inject)你的一个 Controller ):
[Route("api/[controller]")]
public class ValuesController : Controller
{
private readonly ReportDBContext _dbContext;

public ValuesController(ReportDBContext dbContext )
{
_dbContext = dbContext;
}
//...
}

您可以简单地注入(inject) ReportDBContext给您的 BaseController而不是将它也注入(inject)项目中的每个 Controller 。

更新 1

如果不想注入(inject) ReportDBContext进入每个构造函数,然后你可以设计你的 BaseController如下使用 HttpContext.RequestServices:
public class BaseController : Controller
{
protected ReportDBContext DbContext => (ReportDBContext)HttpContext.RequestServices.GetService(typeof(ReportDBContext));
//...
}

[Route("api/[controller]")]
public class ValuesController : BaseController
{
//...

[HttpGet]
public List<Sample> Get() => DbContext.Samples.ToList();
}

在这里阅读更多:
  • https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext
  • http://www.binaryintellect.net/articles/17ee0ba2-99bb-47f0-ab18-f4fc32f476f8.asp

  • 您还需要至少安装这两个 NuGet 包:
  • Microsoft.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.SqlServer (如果数据库提供程序是 Microsoft SQL Server)
  • 关于c# - 有没有更好的方法将 dbcontext 添加到 Asp.core MVC Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62411410/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com