簡體   English   中英

在ASP.NET Core中使用ADO.NET作為數據訪問層

[英]Using ADO.NET for a Data Access Layer in ASP.NET Core

我正在嘗試為我的ASP.NET Core API推出高性能DAL。 我想使用ADO.NET,我在設計軟件架構時遇到了困難。 我正在尋求幫助討論一個好的方法。

我有的

我的代碼庫將包含三個項目

  • MyApp.API
  • MyApp.Repositories(數據訪問層)
  • MyApp.Services(業務邏輯)

我將實現IUnitOfWorkMyApp.Repositories並創建一個具體的SqlUnitOfWorkMyApp.API Startup.cs會將IUnitOfWork注冊到SqlUnitOfWork 稍后,當我獲得更多數據源(Mongo等)時,我可以合並一個UnitOfWorkFactory

問題

  1. 我應該在Startup.cs注冊每個存儲庫還是僅將它們添加為IUnitOfWork屬性? 這里的想法是我會在我的控制器,服務和存儲庫中使用依賴注入,但只需要注入IUnitOfWork

  2. 如何將連接字符串傳遞給SqlUnitOfWork 我知道連接字符串應保持在MyApp.API

另一個答案是無關緊要的,因為它建議我使用EF,我想避免。

我使用存儲庫模式實現了Dapper。 我沒有使用一個工作單元,因為我的結論是導致性能損失,我不想擁有。

這是我實施的原型原型。 https://github.com/lenardchristopher/AdoAspDotNetCoreTest

我相信您正在使用aspnet-core,因此使用Entity Framework,因為您的ORM將在這種情況下工作。

我同意您將您的存儲庫注冊為IUnitOfWork一部分,然后將其作為服務添加到您的DI容器中,然后將其注入控制器中。

要回答第二個問題,我們假設您的SqlUnitOfWork實現有一個接收DbContext實例的構造函數。

在ASP.NET Core中, DbContext被添加到DI容器中,因此在其構造函數中需要或依賴於DbContext的任何其他服務,它將自動由DI容器解析。

首先要記住在appsettings.json定義連接字符串。

在此輸入圖像描述

然后現在讓我們使用該連接字符串將DbContext對象添加到我的DI容器中,並在EF Core中配置DbContext

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

之后,將其他服務注冊到需要我們上下文的DI容器將非常容易,因為容器將解決我們的依賴關系。

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

希望這能回答你的問題。 如果沒有,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM