首页 > 解决方案 > 访问asp dot net core应用后端数据库的最佳实践

问题描述

我正在构建一个由前端、数据库和后端组成的 Web 应用程序。前端可以从数据库中读取数据并显示出来。后端只是更新数据库。我正在使用 asp-dot-net core,一般来说我对编程并不陌生,但对 asp dot-net core 很陌生,如果对我的设计有一些建议会很好:)

在 Startup.cs -> ConfigureServices() 我使用

services.AddDbContext<Database.FeedContext>(options => options.UseSqlite("DataSource=main.db"));

初始化我的数据库。我知道,我可以在控制器类中做这样的事情(例如我的前端)

public class FrontendController : Controller
{
    private Database.FeedContext db;

    public FrontendController(Database.FeedContext db)
    {
        this.db = db;
        ...
    }
}

在这种情况下,数据库将由框架通过依赖注入提供。但是我的后端只是一个具有各种异步功能的静态类。做这样的事情似乎是错误的:

public static class Backend
{
    private static Database.FeedContext db;

    static Backend()
    {
        db = new Database.FeedContext();
        ...
    }
}

注意:后端没有任何状态,除了 db-instance。

最后我的问题是:

  1. 将后端构建为静态类是一种好习惯吗?

  2. 将数据库实例导入后端的好方法是什么?

  3. 我可以/应该为此使用依赖注入吗?

  4. 还有什么建议吗?

提前致谢!

标签: c#databaseasp.net-coredependency-injection

解决方案


  1. 否:在这种情况下,不应在不同请求之间共享 DbContext。让 DI 容器为您管理服务生命周期,因为这通常是人们倾向于静态或单例类的原因。
  2. 有许多“好”的方式通常都涉及 ORM。通常,您希望在公开简单类型而不是数据库类型的服务之后抽象数据库访问。这使您可以稍后更改实现,可能会委托给缓存层或模拟来测试您的控制器。
  3. 是的,并确保您在控制器构造函数参数中请求接口,而不是具体类型。
  4. “dotnet”命令可以生成项目模板,为学习数据访问提供起点;当前 Microsoft 提供的 ORM 是实体框架。例如,请参阅https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new-db 。

推荐阅读