我正在使用 EF,并且在我的 web 配置中,我在第一次添加模型后洗掉了 Connection 字串。所以它現在看起來像這樣:
<connectionStrings> </connectionStrings>
我已經修改了我的 Model.context.cs 檔案,我在物體建構式中添加了一個引數。下面是代碼:
public QMatchServerEntities(string connectionString)
: base(connectionString)
{
}
當我建立連接并創建物體物件時,我在引數中發送整個連接字串。我使用這種情況是因為客戶端要求在代碼中加密資料庫密碼。
Model.QMatchServerEntities qMatch = new Model.QMatchServerEntities("Connection string")
我想知道的是,在此之后,當我更新模型時,它要求我首先創建新連接,因為 EF 無法在 Web 配置中找到該模型的連接字串。有沒有辦法解決這個問題?
謝謝你。
uj5u.com熱心網友回復:
您可以在 Web 應用程式啟動期間實作資料庫的遷移。我假設您使用.NET 6。
首先,在您的專案中創建一個名為 DbInitializer.cs 的新類,如下所示:
using Microsoft.EntityFrameworkCore;
namespace YouAppNamespace.Data
{
public static class DbInitializer
{
public static void Initialize(ApplicationDbContext ctx)
{
// used this for ensure database is created and for appy all migrations at runtime
ctx.Database.Migrate();
}
}
}
之后,在您的 Program.cs 檔案中添加“添加此部分”下提到的代碼:
app.UseAuthentication();
app.UseAuthorization();
// Add this part
var serviceScope = app.Services.GetRequiredService<IServiceScopeFactory>().CreateScope();
var ctx = serviceScope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
DbInitializer.Initialize(ctx);
ctx.Dispose();
serviceScope.Dispose();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
不要忘記添加依賴項。告訴我它是否有效。
uj5u.com熱心網友回復:
您需要指示 DBContext 使用提供的連接字串,因此您的代碼應該重寫 OnConfiguring(...) 方法,有點像這樣:
public class ApplicationDbContext : DbContext
{
private readonly string _connectionString;
public ApplicationDbContext(string connectionString)
{
_connectionString = connectionString;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(_connectionString);
}
}
您可以在此處找到更多資訊:https : //docs.microsoft.com/en-us/ef/core/dbcontext-configuration/
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/408959.html
標籤:
下一篇:從子類呼叫超類方法
