我正在嘗試在包管理器控制臺中運行“update-database -verbose”,但我在輸出末尾得到以下幾行:(我的 SQL 服務器中沒有生成任何內容)
Using context 'TutoringContext'.
Finding design-time services for provider 'Microsoft.EntityFrameworkCore.SqlServer'...
Using design-time services from provider 'Microsoft.EntityFrameworkCore.SqlServer'.
Finding design-time services referenced by assembly 'LakeTutoringWebsite'...
Finding design-time services referenced by assembly 'LakeTutoringWebsite'...
No referenced design-time services were found.
Finding IDesignTimeServices implementations in assembly 'LakeTutoringWebsite'...
No design-time services were found.
我看到我可以像這樣創建一個 DesignTimeDbContextFactory:https ://docs.microsoft.com/en-us/ef/core/cli/dbcontext-creation?tabs=dotnet-core-cli
但是建構式必須是無引數的,所以我不能傳遞一個 IConfiguration 物件來獲取我的連接字串。如何在不對連接字串進行硬編碼的情況下運行“更新資料庫”?
基于上面的鏈接,我認為我可以運行“更新資料庫”,因為我已將我的 DBContext 添加到服務中。
我在我的專案中為我的 DBContext 使用依賴注入:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<TutoringContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("LakeTutoringDatabase")));
}
}
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
public class TutoringContext : IdentityDbContext<IdentityUser>
{
public DbSet<Comment> Comments { get; set; }
public TutoringContext(DbContextOptions<TutoringContext> options) : base(options)
{
}
}
我正在使用 ASP.NET Core 3.1
我使用 NuGet 安裝了 System.Configuration.Configuration 版本 6.0.0。
uj5u.com熱心網友回復:
首先,除了創建 IDesignTimeDbContextFactory 的實作外,您的專案還需要添加對包的參考:
Microsoft.EntityFrameworkCore.Design
通常,硬編碼字串在此類中并沒有那么糟糕,因為您只是在使用開發資料庫。理想情況下,您將在應用程式啟動時以代碼(而不是命令列中的 update-database)將遷移應用到其他資料庫(暫存、測驗版、生產),這將使用通過 IConfiguration 訪問的 appsettings.json 檔案中的值。
但是,如果您確實希望從 json 檔案訪問開發連接字串,則此鏈接可以很好地引導您通過它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/494606.html
