我有一個名為 StudentDbContext 的類。我在其中呼叫了 OnConfiguring 方法。我看到在一些培訓視頻中使用了依賴注入。這里我們已經使用了一次背景關系。為什么我應該使用依賴注入而不是 OnConfiguring?
選項1
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySQL("...");
}
選項 2
public StudentDbContext(DbContextOptions<StudentDbContext> context) : base(context)
{
}
uj5u.com熱心網友回復:
protected override void OnConfiguring( DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseMySQL("..."); }
使用這種方法,您可以準確決定StudentDbContext直接在其中使用哪個提供程式 (MySQL) 和哪個連接字串。如果要更改此設定以使用不同的提供程式或連接字串,則必須StudentDbContext直接修改該類。例如,考慮一種情況,您希望為開發和生產使用不同的提供程式。
public StudentDbContext(DbContextOptions<StudentDbContext> context) : base(context) { }
這種方法允許您從StudentDbContext.
使用依賴注入,您將在Startup.ConfigureServices(或帶有 ASP .NET Core 6 的Program.cs)中看到類似的內容:
services.AddDbContext<StudentDbContext>(options =>
{
options.UseMySQL("...");
});
當您想根據環境使用不同的提供程式/連接字串(甚至其他設定)時,第二種方法變得更加強大,例如:
if (hostEnvironment.IsDevelopment())
{
services.AddDbContext<StudentDbContext>(options =>
{
options.UseMySQL("...");
});
}
else
{
services.AddDbContext<StudentDbContext>(options =>
{
options.UseSqlServer("...");
});
}
uj5u.com熱心網友回復:
通過依賴注入,DbContext 不需要知道正在使用的實際資料庫。此外,DbContext 甚至不需要知道應該使用哪些配置設定來建立資料庫連接。
這使您的代碼更加獨立。這例如使您的代碼更具可測驗性。還有其他優點。
uj5u.com熱心網友回復:
您還可以配置兩種方法以供使用
資料庫背景關系
protected override void OnConfiguring(
DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseMySQL("...");
}
}
或啟動配置
services.AddDbContext<StudentDbContext>(options =>
{
options.UseMySQL("...");
});
在這種情況下,如果您不配置啟動配置,或者如果您在另一個沒有依賴注入的專案中使用您的 db 背景關系,將使用本地 db 背景關系配置,否則為全域。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/367638.html
標籤:C# asp.net核心 .net核心 依赖注入 数据库上下文
上一篇:如何使用EF使用多源資料庫
