dotnet core program.cs行为不同 - 无法创建“AppDbContext”类型的对象

时间:2018-05-22 13:42:23

标签: c# asp.net .net .net-core

我想问一下为什么> dotnet ef迁移添加了InitialMigration

在这两个program.cs代码上表现不同

代码1:

 public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();

代码2

public static void Main(string[] args)
    {
         CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();

使用Code-1,我可以运行&gt; dotnet ef迁移添加InitialMigration 而不会出现错误。使用PackageManager控制台&gt; 添加迁移初始迁移 也没有错误。

但是使用Code-2,我在Pakckage Manager Console和命令提示符上都出现错误。这是错误:

  

无法创建“AppDbContext”类型的对象。将“IDesignTimeDbContextFactory”的实现添加到项目中,或者参阅https://go.microsoft.com/fwlink/?linkid=851728了解设计时支持的其他模式。

据我了解,这两个代码基本上都做同样的事情。

1 个答案:

答案 0 :(得分:0)

约定在ASP.NET Core 2.0和2.1之间发生了变化。

在2.1中,静态方法应返回IWebHostBuilder(出于工具原因)。

但是,您将需要作为2.1.300 SDK的一部分提供的dotnet ef版本(在撰写本文时只有候选版本可用),而不是当前作为CLI工具参考提供的版本(项目文件中的DotNetCliToolReference

这是在版本之间更新的SPA模板的问题,这些版本现在遵循新约定但定位为2.0 - https://github.com/aspnet/templating/issues/442

您可以轻松地将代码更改为与您提供的Code 1示例类似,或者更新为撰写本文时可用的RC版本。