c# - 访问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。
最后我的问题是:
将后端构建为静态类是一种好习惯吗?
将数据库实例导入后端的好方法是什么?
我可以/应该为此使用依赖注入吗?
还有什么建议吗?
提前致谢!
解决方案
- 否:在这种情况下,不应在不同请求之间共享 DbContext。让 DI 容器为您管理服务生命周期,因为这通常是人们倾向于静态或单例类的原因。
- 有许多“好”的方式通常都涉及 ORM。通常,您希望在公开简单类型而不是数据库类型的服务之后抽象数据库访问。这使您可以稍后更改实现,可能会委托给缓存层或模拟来测试您的控制器。
- 是的,并确保您在控制器构造函数参数中请求接口,而不是具体类型。
- “dotnet”命令可以生成项目模板,为学习数据访问提供起点;当前 Microsoft 提供的 ORM 是实体框架。例如,请参阅https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new-db 。
推荐阅读
- vue.js - 避免直接改变 prop,因为只要父组件重新渲染,该值就会被覆盖。(Vue路由器)
- arrays - Pyspark在中间读取csv数组列
- javascript - JavaScript Node.js 承诺
在.map - python - 使用循环访问列表的多个元素
- python-3.x - 在提取动画人物的脸时,我得到了 UnboundLocalError
- ios - 在具有自定义单元格高度的垂直 UICollectionView 上居中分页
- django - formset 对象的表单没有属性“已清理的详细信息”
- javascript - JS Promises:then() 方法总是返回一个 Promise,还是可以返回一个 thenable?
- javascript - Post Route 中的 TypeError 错误
- http - 在颤振中使用http GET请求的问题