无法迁移.Net-Core 2.0添加IDesignTimeDbContextFactory的实现

时间:2017-12-10 23:27:54

标签: c# ef-migrations asp.net-core-2.0 duck-typing

注意这不重复,我正在寻找一种不依赖于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的情况下运行迁移吗?

0 个答案:

没有答案