我试图在Package控制台中运行‘-verbose’,但是在输出的末尾我得到了以下行:(我的SQL server中没有生成任何内容)
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://learn.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 Core3.1
我使用System.Configuration.Configuration安装了6.0.0版本的NuGet。
发布于 2022-06-17 09:56:18
首先,除了创建IDesignTimeDbContextFactory的实现之外,您的项目还需要添加对包的引用:
Microsoft.EntityFrameworkCore.Design通常,硬编码字符串在这个类中并不坏,因为您只是在使用开发数据库。理想情况下,您可以在应用程序启动时(而不是命令行中的update-database )将迁移应用程序应用到其他数据库(暂存、测试、生产),这些数据库将使用通过appsettings.json访问的IConfiguration文件中的值。
但是,如果您确实希望从json文件中访问开发连接字符串,那么这个链接可以很好地引导您浏览它。
https://stackoverflow.com/questions/72657254
复制相似问题