【问题标题】:Using ADO.NET for a Data Access Layer in ASP.NET Core在 ASP.NET Core 中使用 ADO.NET 作为数据访问层
【发布时间】:2018-09-08 21:39:20
【问题描述】:

我正在尝试为我的 ASP.NET Core API 推出高性能 DAL。我想使用 ADO.NET,但在设计软件架构时遇到了困难。我正在寻求帮助来讨论一个好的方法。

我有什么

我的代码库将包含三个项目

  • MyApp.API
  • MyApp.Repositories(数据访问层)
  • MyApp.Services(业务逻辑)

我将在MyApp.Repositories 中实现IUnitOfWork,并在MyApp.API 中创建一个具体的SqlUnitOfWorkStartup.cs 将注册IUnitOfWorkSqlUnitOfWork。稍后,当我获得更多数据源(Mongo 等)时,我可以合并一个UnitOfWorkFactory

问题

  1. 我应该在Startup.cs 中注册每个存储库还是简单地将它们添加为IUnitOfWork 的属性?这里的想法是我会在我的控制器、服务和存储库中使用依赖注入,但只需要注入 IUnitOfWork

  2. 如何将我的连接字符串传递到SqlUnitOfWork?我知道连接字符串应该保留在MyApp.API 内。

【问题讨论】:

  • 如果SqlUnitOfWork 在启动时作为服务添加,您可以注入上下文。如果需要,您还可以注入IConfiguration 以访问连接字符串。

标签: c# asp.net asp.net-core ado.net


【解决方案1】:

另一个答案是无关紧要的,因为它建议我使用 EF,我想避免。

我使用存储库模式实现了 Dapper。我没有使用工作单元,因为我认为这样做会导致我不希望的性能损失。

这是我实现的原始原型。 https://github.com/lenardchristopher/AdoAspDotNetCoreTest

【讨论】:

  • 你好,你反对 ADO.NET 的模型? El el link que nos compartes observo que utilizan Dapper。有问题吗?
【解决方案2】:

我相信您正在使用 aspnet-core,因此使用 Entity Framework 作为您的 ORM 将在这种情况下工作。

我同意您将您的存储库注册为 IUnitOfWork 的一部分,然后将其作为服务添加到您的 DI 容器中,然后您将注入您的控制器。

要回答您的第二个问题,我们假设您的 SqlUnitOfWork 实现有一个接收 DbContext 实例的构造函数。

在 ASP.NET Core 中,DbContext 被添加到 DI 容器中,因此 任何其他需要或依赖于 DbContext 的服务 它是构造函数,它将由 DI 自动解析 容器。

首先记得在appsettings.json中定义你的连接字符串。

然后现在让我们使用该连接字符串将DbContext 对象添加到我们的DI 容器和一个小Futher reading on Configuring DbContext in EF Core

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<MyDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Database")));
}

之后,将需要我们上下文的其他服务注册到我们的 DI 容器将非常容易,因为容器将为我们解决该依赖关系。

public void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<IUnitOfWork, SqlUnitOfWork>();
}

希望这能回答您的问题。如果没有,请告诉我。

【讨论】:

  • 感谢您的回复。不幸的是,我特别想不使用实体框架。我想使用 ADO.NET(或 Dapper),因为性能是我的应用程序的主要关注点。那么,我将如何创建 dbContext 的 ADO.NET 版本并将其传递给 SqlUnitOfWork
  • 从 OP 看来,他们不想使用 EF 来支持他们自己的包装 ADO.Net 的实现。此外,EF已经是一个存储库/UoW,因此为此目的推荐额外的类/抽象/层是非常多余的
猜你喜欢
  • 1970-01-01
  • 2011-04-15
  • 2023-01-28
  • 1970-01-01
  • 2012-06-21
  • 2013-06-21
  • 2011-12-10
  • 2011-02-14
  • 1970-01-01
相关资源
最近更新 更多