【问题标题】:Access DBContext in ASP.NET Core 6 from data access layer class从数据访问层类访问 ASP.NET Core 6 中的 DBContext
【发布时间】:2023-01-28 06:10:57
【问题描述】:

我有一个从 VS 2022 模板创建的 ASP.NET Core 6 MVC 应用程序。我正在编写自定义数据访问层和业务逻辑层。

我知道我可以通过 DAL 中的 BLL 从控制器向下传递 _context,但是我更愿意从 DAL 直接访问。我看不出 BLL 或 Web 代码需要与数据访问有任何关系的任何理由。

我已经尝试了几个注入示例,但我似乎无法让它们中的任何一个工作。有人有好的解决方案吗?

编辑:

在 Project.cs 中,我添加了 DbContext:

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));

我想在我的自定义数据访问层中访问 DbContext,而不必像这样将 DbContext 从 Controller 一路向下传递到我的 DAL 构造函数:

namespace MyProject.Code
  public class CustomDataAccessLayer
  {
    public string[] GetCustomers()
    {
      DbConnection conn = DbContext.GetConnection();
      //Whatever query logic I want to do here

有什么方法可以直接访问 DbContext 而不必从控制器操作中传入它吗?

【问题讨论】:

  • 你能告诉我们你的代码吗?
  • 1)注册你的对象。 2)将它们注入课堂。请展示您尝试过的内容。
  • 你遇到了什么问题?你不能将 dbCOntext 注入 DAL?您需要提供更多详细信息。
  • 为了清楚起见,添加到原始问题中。
  • 我的最终目标实际上只是获得对 DbContext 连接的访问​​权限,以便在我的自定义 DAL 中我可以创建一个 SqlConnection 并执行我想要对数据库执行的任何 SQL,而无需考虑单独的实体。如果有另一种方法可以从我的 DAL 获取连接而不必将其从控制器向下传递,我会接受的。

标签: c# asp.net-core-mvc .net-6.0 data-access-layer asp.net-core-6.0


【解决方案1】:

Here 您可以阅读有关 DI 的确切工作原理的信息。

我将提供一些您应该如何执行此操作的示例。

首先你需要有 DataContext 扩展 DbContext 类的类,就像这样

using Microsoft.EntityFrameworkCore;

namespace MyProject.Context
{
    public class DataContext : DbContext
    {
        public DataContext(DbContextOptions options) : base(options)
        {
        }

        public DbSet<MyEntity> Entities { get; set; }
    }
}

Program.cs你需要像这样添加DataContext

builder.Services.AddDbContext<DataContext>(options =>
{
    options.UseSqlServer(builder.Configuration
        .GetConnectionString("DefaultConnection")); // for example if you're holding the connection string in the appsettings.json
});

然后在要使用它的逻辑类中,在DataContext类型的类中创建一个数据成员

private readonly DataContext _dataContext;

并且您的构造函数必须将 DataContext 作为参数并初始化您的构造函数将如下所示

public ClassName(DataContext dataContext)
{
    _dataContext = dataContext;
}

【讨论】:

  • 这基本上就是 ASP.Net Core 项目模板已经提供给我的内容。我希望直接从我的自定义数据访问层中访问 DbContext,而不必通过 DAL 构造函数从控制器传递它。
【解决方案2】:

用 json:

 var constr = builder.Configuration["ConnectionStrings:Default"];
    builder.Services.AddDbContext<AppDbContext>(
            opt => {
                opt.UseSqlServer(constr);
                });

//Json :

"ConnectionStrings": {
    "Default": "Server=Victus;Database=TeamDb;Trusted_Connection=true;"
  }

【讨论】:

    猜你喜欢
    • 2021-01-06
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 2013-06-21
    • 2011-12-10
    相关资源
    最近更新 更多