注意这不重复,我正在寻找一种不依赖于Duck-Typing的实现
我最近升级到.Net Core 2.0。我尝试在我的数据库上运行迁移,但由于错误而失败:
无法创建' PersistedGrantDbContext'类型的对象。添加' IDesignTimeDbContextFactory'
的实现
我对这个问题进行了一些研究,发现我需要修改我的program.cs 旧代码:
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();
host.Run();
}
需要转变为:
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
//WTF? you have to name it this so migrations work
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().Build();
起初我认为当你使用CreateDefaultBuilder时,它会为IDesignTimeDbFactory做一些狡猾的注册,但真正奇怪的是,它只在该方法名为BuildWebHost时才有效。
为什么新的迁移基于像Duck-Typing这样的抽象功能?
我不想被束缚于这样一个任意的东西,任何人都可以告诉我如何在不命名方法BuildWebHost的情况下运行迁移吗?