首页 > 解决方案 > MVC 项目的控制器中使用的数据库上下文

问题描述

具体问题-如何将在 ASP.Net CORE Web 应用程序中DbContext创建的内容反弹到不首先通过控制器的情况下?StartupData Access Layer

目前的模式是:

request starts ---> dbcontext created ---> dbcontext passed to controller ---> pass to DAL --> return items

但我真的只想

request starts ---> controller instanced ---> controller calls dal ---> dbcontext created -- return items

我遇到的问题是将配置从 appsettings 获取到 dal。


背景:

在旧的框架项目中,我有一个数据访问层,我在控制器中使用单行语句对其进行实例化和处理,通常如下所示:

List<stuff> MyListOfStuff = new DAL().GetStuff();
Return View(MyListOfStuff)

通常使用链式语法或所需的任何映射方法将这些列表/对象映射到同一行中的 ViewModel。

上下文在 DAL() 创建期间被实例化,并从 global.asax 或 web.config 获取其参数

我很确定我最终养成了这个习惯,因为(我认为)我在很多地方读到了业务逻辑和数据访问逻辑不应该放在控制器中。控制器应该尽可能少?

我现在正在学习 asp.net 核心,其中上下文在启动时配置并实例化并默认传递给控制器​​,而 MSDN 教程显示我们应该在控制器中直接使用该上下文而不使用或传递它到另一层。

教程是否只是向我们展示了一种快速、最少的做事方式以便开始使用,或者这实际上是最佳实践?我更喜欢仅在 DAL 中实例化上下文,并且还没有真正看到其他方式的好处,并且无法弄清楚如何将我appsettings.json配置的 DbContexts 拉入任何旧的 DAL 类。

https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro?view=aspnetcore-3.1

标签: c#asp.netasp.net-mvc

解决方案


推荐阅读