[英]Using ADO.NET for a Data Access Layer in ASP.NET Core
我正在嘗試為我的ASP.NET Core API推出高性能DAL。 我想使用ADO.NET,我在設計軟件架構時遇到了困難。 我正在尋求幫助討論一個好的方法。
我的代碼庫將包含三個項目
我將實現IUnitOfWork
內MyApp.Repositories
並創建一個具體的SqlUnitOfWork
在MyApp.API
。 Startup.cs
會將IUnitOfWork
注冊到SqlUnitOfWork
。 稍后,當我獲得更多數據源(Mongo等)時,我可以合並一個UnitOfWorkFactory
。
我應該在Startup.cs
注冊每個存儲庫還是僅將它們添加為IUnitOfWork
屬性? 這里的想法是我會在我的控制器,服務和存儲庫中使用依賴注入,但只需要注入IUnitOfWork
。
如何將連接字符串傳遞給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.