【问题标题】:dotnet core program.cs behaves differently - Unable to create an object of type 'AppDbContext'dotnet core program.cs 行为不同 - 无法创建“AppDbContext”类型的对象
【发布时间】:2018-05-22 22:25:44
【问题描述】:

我想问一下为什么 >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,我可以运行 >dotnet ef migrations add InitialMigration 而不会出错。使用 PackageManager 控制台> add-migration Initial Migration 也没有错误。

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

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

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

【问题讨论】:

  • 我刚得到新信息:我认为 add-migation 或 dotnet ef migrations 命令调用了 program.cs 文件中的 BuildWebHost 方法。因此,当我在 Code-2 中更改方法名称时,这是我得到的错误: PM> Add-Migration initialmigration 在类“程序”上调用方法“BuildWebHost”时发生错误。在没有应用程序服务提供商的情况下继续。我认为,迁移命令需要 build 命令提供的 IWebHost 才能工作

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


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 是的。你说的对。现在将使用类似于 Code1 的代码。等待2.1.3正式发布
猜你喜欢
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
相关资源
最近更新 更多