【问题标题】:Unable to create migrations after upgrading to ASP.NET Core 2.0升级到 ASP.NET Core 2.0 后无法创建迁移
【发布时间】:2017-08-20 13:01:09
【问题描述】:

升级到 ASP.NET Core 2.0 后,我似乎无法再创建迁移。

我来了

"在类上调用方法 'BuildWebHost' 时发生错误 '程序'。在没有应用程序服务提供商的情况下继续。错误: 发生一个或多个错误。 (无法打开由请求的数据库“...” 登录。登录失败。用户 '...' 登录失败"

“无法创建“MyContext”类型的对象。添加一个实现 将“IDesignTimeDbContextFactory”添加到项目中,或参见 https://go.microsoft.com/fwlink/?linkid=851728 更多模式 在设计时支持。”

我之前运行的命令是$ dotnet ef migrations add InitialCreate --startup-project "..\Web"(来自带有 DBContext 的项目/文件夹)。

连接字符串:"Server=(localdb)\\mssqllocaldb;Database=database;Trusted_Connection=True;MultipleActiveResultSets=true"

这是我的 Program.cs

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

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

【问题讨论】:

  • 可能问题不在 Program.cs 中。这可能是在您的 Configure 方法末尾使用指令加载种子数据: DbInitializer.Initialize (context);如果您有该指令,请将其注释: //DbInitializer.Initialize(context);然后运行迁移说明进行测试。如果出现问题,则跟进 DbInitializer.cs 类。
  • 你的 MyContext 类是否在另一个类库项目中?
  • 这里有同样的问题,上下文在其他库中。如果 id 在上下文中添加了一个无参数的构造函数,则迁移正在工作,但出现相同的错误:(在类 'Program' 上调用方法 'BuildWebHost' 时发生错误。在没有应用程序服务提供者的情况下继续。错误:未设置对象引用到一个对象的实例。)
  • 你最后解决了吗?
  • @MiguelTorresC 感谢您的评论。我注释掉了我的播种方法和迁移再次开始工作。非常感谢!!!

标签: c# asp.net-core asp.net-core-mvc entity-framework-core asp.net-core-2.0


【解决方案1】:

您可以在 Web 项目中添加一个实现 IDesignTimeDbContextFactory 的类。

这里是示例代码:

public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<CodingBlastDbContext>
{
    public CodingBlastDbContext CreateDbContext(string[] args)
    {
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();
        var builder = new DbContextOptionsBuilder<CodingBlastDbContext>();
        var connectionString = configuration.GetConnectionString("DefaultConnection");
        builder.UseSqlServer(connectionString);
        return new CodingBlastDbContext(builder.Options);
    }
}

然后,导航到您的数据库项目并从命令行运行以下命令:

dotnet ef migrations add InitialMigration -s ../Web/

dotnet ef database update -s ../Web/

-s stands for startup project and ../Web/ is the location of my web/startup project.

resource

【讨论】:

  • 我得到:配置文件“appsettings.json”未找到,不是可选的。物理路径为“C:\Users\XXX\Documents\Visual Studio 2017\Projects\XXX\src\XXX.Api\bin\Debug\netcoreapp2.0\appsettings.json”。我的 appsettings 位于 C:\Users\XXX\Documents\Visual Studio 2017\Projects\XXX\src\XXX.Api.
  • 确保将 appsettings.json 文件设置为复制到本地应该可以解决找不到它的问题
  • 这个解决方案在你的宿主应用程序中引入了对实体框架的依赖(在我的例子中,这是一个 Web 项目)。有没有办法解决这个问题?我希望我的 Repository 库保存 EF 内容,而不是将 EF 引入 Web 应用程序。
  • 尽管这是公认的答案,但这个更好:stackoverflow.com/a/52671330/1737395 实际上,使用 --verbose 标志运行迁移有很大帮助
【解决方案2】:

不需要IDesignTimeDbContextFactory

运行

add-migration initial -verbose

这将揭示

下的详细信息

访问“程序”类上的 IWebHost 时出错。在没有应用程序服务提供商的情况下继续。

警告,这是问题的根本原因。

就我而言,问题是,有ApplicationRole : IdentityRole&lt;int&gt; 并调用services.AddIdentity&lt;ApplicationUser, IdentityRole&gt;() 导致以下错误

System.ArgumentException: GenericArguments[1], 'Microsoft.AspNetCore.Identity.IdentityRole', 
on 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`9[TUser,TRole,TContext,
TKey,TUserClaim,TUserRole,TUserLogin,TUserToken,TRoleClaim]' violates the constraint of type 'TRole'.
---> System.TypeLoadException: GenericArguments[1], 'Microsoft.AspNetCore.Identity.IdentityRole', 
on 'Microsoft.AspNetCore.Identity.UserStoreBase`8[TUser,TRole,TKey,TUserClaim,
TUserRole,TUserLogin,TUserToken,TRoleClaim]' violates the constraint of type parameter 'TRole'.

【讨论】:

  • 是的 -Verbose 有助于真正发现真正的问题。在我的情况下,还没有将 AddDbContext 服务添加到启动中。
  • dotnet ef 迁移添加 InitialCreate --verbose
  • @tchelidze 谢谢你,就我而言,我的 ApplicationDbContext 中没有无参数构造函数。
  • 这是一个很棒的提示,应该是公认的答案
  • 非常感谢,这帮助我找到了我的问题并解决了它。在我的例子中,它是一个“没有为类型'Data.Access.DAL.MainDbContext'定义的无参数构造函数。”,因此,我只是从构造函数中删除了参数,它就像魔术一样工作!
【解决方案3】:

解决方案 1:(在 99% 的情况下找到问题)

Web Application项目设置为Startup Project

使用-verbose 选项运行以下命令。

Add-Migration Init -Verbose

-verbose 选项有助于真正发现真正的问题,它 包含详细错误。

解决方案 2:

BuildWebHost() 重命名为CreateWebHostBuilder(),因为Entity Framework Core tools 期望找到一个CreateHostBuilder 方法来配置主机而不运行应用程序。

.NET Core 2.2

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

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

.NET Core 3.1

BuildWebHost() 重命名为CreateHostBuilder()

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>();
            });
}

解决方案 3:

确保将 Dbcontext 添加到依赖注入: AddDbContext&lt;TContext&gt; 将使您的 DbContext 类型 TContext 和相应的 DbContextOptions&lt;TContext&gt; 都可用于从服务容器注入。 这需要向您的 DbContext 类型添加一个构造函数参数,该类型接受 DbContextOptions&lt;TContext&gt;

示例: 在 Startup.cs 中

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<AppDbContext>(options => options.UseSqlServer(connectionString));
}

AppDbContext 代码:

public class AppDbContext: DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options)
      :base(options)
    { }

}

【讨论】:

  • 这对我有用。将 Program.cs 中的 BuildWebHost 函数从 public static IWebHostBuilder BuildWebHost(string[] args) 更改为 public static IWebHost BuildWebHost(string[] args),现在函数中包含 .Build()
  • 伙计们,如果您使用的是 ASP.NET Core 2.1+,您的 BuildWebHost 方法将有一个不同的名称 - CreateWebHostBuilder 因为docs.microsoft.com/en-us/aspnet/core/migration/… 所以将 CreateWebHostBuilder 重命名为 BuildWebHost 并且迁移将找到 BuildWebHost 并从中获取 DbContext .
  • 谢谢老哥,在不使用IDesignTimeDbContextFactory987654344@的情况下花了2个小时配置后解决了
  • 感谢“-Verbose”标志。它帮助我找到了异常的根本原因。
【解决方案4】:
public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

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

只需将 BuildWebHost() 重命名为 CreateWebHostBuilder(),因为迁移默认使用此方法。

【讨论】:

  • 什么。这应该在每个处理这个问题的页面上做广告你是认真的。立竿见影的成功。谢谢。
  • 拯救我的一天!这是一个非常奇怪的错误。我正在使用带有预览版 7 的 .net core 3.0 并且此错误仍然存​​在
  • D Todorov 只需将 BuildWebHost() 重命名为 CreateHostBuilder()
  • @WernerCD Cuz Worker 使用了实现 Net Core 3 的 IHostBuilder 的 CreateHostBuilder() 方法
【解决方案5】:

就我而言,问题的原因是多个启动项目。我的解决方案中有三个项目:Mvc、Api 和 Dal。 Dal 项目中的 DbContext 和迁移。

我已经配置了多个启动项目。当我单击开始时,Mvc 和 Api 项目都在运行。但在这种情况下,我遇到了这个错误。

“无法创建“MyContext”类型的对象。添加一个实现 将“IDesignTimeDbContextFactory”添加到项目中,或参见 https://go.microsoft.com/fwlink/?linkid=851728 更多模式 在设计时支持。”

在将 Mvc 设置为唯一启动项目并在 Package Manager Console 中选择 Dal 后,我可以成功添加迁移。

【讨论】:

  • 谢谢,我也遇到了同样的事情。我不得不将启动项目更改为存在启动/程序类的地方。错误消息是一个糟糕的笑话。
  • 输出消息真的令人沮丧。出乎意料的是,我没有选择任何启动项目。这就是无法创建 dbContext 的原因。谢谢。
  • 谢谢您,先生...节省了我很多时间
【解决方案6】:

在 AppContext.cs 中除了 AppContext 类添加另一个类:

// required when local database deleted
public class ToDoContextFactory : IDesignTimeDbContextFactory<AppContext>
{
    public AppContext CreateDbContext(string[] args)
    {
        var builder = new DbContextOptionsBuilder<AppContext>();
          builder.UseSqlServer("Server=localhost;Database=DbName;Trusted_Connection=True;MultipleActiveResultSets=true");
        return new AppContext(builder.Options);
    }
}

这将解决您的第二个问题:

“无法创建“MyContext”类型的对象。将“IDesignTimeDbContextFactory”的实现添加到项目中,

之后,您将能够 add-migration Initial 并通过运行 update-database 命令执行它。 但是,如果在本地 SqlServer 中还没有数据库时运行这些命令,您将收到类似于第一个错误的警告:“错误

在类“程序”上调用方法“BuildWebHost”时发生... 登录失败。用户 '...' 登录失败"

但这不是错误,因为将创建迁移并且可以执行它。 所以第一次忽略这个错误,后面因为 Db 会存在它不会再发生。

【讨论】:

    【解决方案7】:

    请确认您有参考资料

    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0" />
    

    【讨论】:

    • 我正在使用&lt;PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /&gt;,其中包括该参考。我也尝试了包括上述内容,但没有改变。
    【解决方案8】:

    您可以从this discussion 尝试此解决方案,该解决方案受到by this post 的启发。

    public static IWebHost MigrateDatabase(this IWebHost webHost)
    {
        using (var scope = webHost.Services.CreateScope())
        {
            var services = scope.ServiceProvider;
    
            try
            {
                var db = services.GetRequiredService<MyContext>();
                db.Database.Migrate();
            }
            catch (Exception ex)
            {
                var logger = services.GetRequiredService<ILogger<Program>>();
                logger.LogError(ex, "An error occurred while migrating the database.");
            }
        }
    
        return webHost;
    }
    public static void Main(string[] args)
    {
        BuildWebHost(args)
            .MigrateDatabase()
            .Run();
    }
    

    【讨论】:

    • 我仍然得到:添加 'IDesignTimeDbContextFactory' 的实现......
    【解决方案9】:

    真正帮助我的是这篇文章:https://elanderson.net/2017/09/unable-to-create-an-object-of-type-applicationdbcontext-add-an-implementation-of-idesigntimedbcontextfactory/

    基本思想是,在从 .net core 1 到 2 的转换中,所有 db 初始化都应该从 StartUp.cs 移到 Program.cs 中。否则,EF 任务会在执行任务时尝试运行您的数据库初始化。

    “在官方迁移文档 (https://docs.microsoft.com/en-us/ef/core/miscellaneous/1x-2x-upgrade) 中有一个不错的部分,标题为“移动数据库初始化代码”,我似乎错过了。所以在你像我一样进入任何兔子洞之前,请确保这不是是什么导致您需要添加 IdesignTimeDbContextFactory 的实现。”

    【讨论】:

    • 谢谢,这对我也有帮助。
    【解决方案10】:

    来自

    https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dbcontext-creation

    当你创建一个新的 ASP.NET Core 2.0 应用程序时,这个钩子是 默认包含。在以前版本的 EF Core 和 ASP.NET Core 中, 这些工具尝试直接调用 Startup.ConfigureServices 以 获取应用程序的服务提供者,但这种模式不再 在 ASP.NET Core 2.0 应用程序中正常工作。如果您正在升级 一个 ASP.NET Core 1.x 应用程序到 2.0,你可以修改你的程序 类以遵循新模式。

    在 .Net Core 2.x 中添加工厂

    public class BloggingContextFactory : IDesignTimeDbContextFactory<BloggingContext>
        {
            public BloggingContext CreateDbContext(string[] args)
            {
                var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
                optionsBuilder.UseSqlite("Data Source=blog.db");
    
                return new BloggingContext(optionsBuilder.Options);
            }
        }
    

    【讨论】:

      【解决方案11】:

      我遇到了这个问题,通过 Set -> Web Application(Included Program.cs) Project to -> "Set as Startup Project" 解决了这个问题

      然后运行 ​​-> add-migration initial -verbose

      在包管理器控制台中

      Set as Startup Project

      【讨论】:

      • 谢谢,唯一对我有用的解决方案是将 Web 项目设置为启动项目,而这正是需要做的。
      【解决方案12】:

      如果你想避免那些 IDesignTimeDbContextFactory 的事情:只要确保你在你的启动中没有使用任何 Seed 方法。我在启动时使用了静态种子方法,它导致了这个错误。

      【讨论】:

        【解决方案13】:

        之前,您在 Startup.cs 的 Configure 方法中配置了种子数据。现在建议您仅使用 Configure 方法来设置请求管道。应用启动代码属于Main方法。

        重构的 Main 方法。将以下引用添加到 Program.cs:

        使用 Microsoft.Extensions.DependencyInjection;

        使用 MyProject.MyDbContextFolder;

        public static void Main(string[] args)
        {
            var host = BuildWebHost(args);
        
            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                try
                {
                    var context = services.GetRequiredService<MyDbConext>();
                    DbInitializer.Initialize(context);
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService<ILogger<Program>>();
                    logger.LogError(ex, "An error occurred while seeding the database.");
                }
            }
        
            host.Run();
        }

        【讨论】:

          【解决方案14】:

          在 2.0 中,从 Startup.Configure 为 ef 播种 db 存在问题……您仍然可以通过这项工作来解决。测试并运行良好

          https://garywoodfine.com/how-to-seed-your-ef-core-database/

          【讨论】:

            【解决方案15】:

            就我而言,我遇到了问题,因为我在 Startup.cs 文件中调用了一个名为 SeedData.EnsurePopulated() 的方法。

            public class Startup
            {
                public Startup(IConfiguration configuration) => Configuration = configuration;
                public IConfiguration Configuration { get; }
            
                public void ConfigureServices(IServiceCollection services)
                {
                    //
                }
            
                public void Configure(IApplicationBuilder app, IHostingEnvironment env)
                {
                    app.UseDeveloperExceptionPage();
                    app.UseStatusCodePages();
                    app.UseStaticFiles();
                    app.UseSession();
                    app.UseMvc(routes =>
                    {
                        //
                    });
            
                    SeedData.EnsurePopulated(app);
                }
            }
            

            SeedData 类的工作是将初始数据添加到数据库表中。它的代码是:

            public static void EnsurePopulated(IApplicationBuilder app)
                {
                    ApplicationDbContext context = app.ApplicationServices.GetRequiredService<ApplicationDbContext>();
                    context.Database.Migrate();
                    if (!context.Products.Any())
                    {
                        context.Products.AddRange(
                        new Product
                        {
                            Name = "Kayak",
                            Description = "A boat for one person",
                            Category = "Watersports",
                            Price = 275
                        },
                        ....
                        );
                        context.SaveChanges();
                    }
                }
            

            解决方案

            在进行迁移之前,只需在 Startup.cs 文件中注释掉 SeedData 类的调用即可。

            // SeedData.EnsurePopulated(app);
            

            这解决了我的问题,希望你的问题也能以同样的方式解决。

            【讨论】:

              【解决方案16】:

              我遇到了错误

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

              我的问题就是这样解决的。在解决方案目录中运行以下命令

               dotnet ef migrations add InitialMigration --project "Blog.Infrastructure" --startup-project "Blog.Appication"
              

              这里的 Application 是我的包含 Startup.cs 类的启动项目,而 Infrastructure 是我的包含 DbContext 类的项目。

              然后使用相同的结构运行更新。

              dotnet ef database update --project "Blog.Infrastructure" --startup-project "Blog.Application"
              

              【讨论】:

                【解决方案17】:

                我遇到了同样的问题。我在解决方案中有两个项目。其中

                1. API
                2. 保存上下文模型的服务和存储库

                最初,API 项目被设置为启动项目。

                我将 Startup 项目更改为包含上下文类的项目。 如果您使用的是 Visual Studio,您可以通过以下方式将项目设置为启动项目:

                打开解决方案资源管理器>>右键单击上下文项目>>选择设置为启动项目

                【讨论】:

                  【解决方案18】:

                  首先确保您已在Startup.cs 中配置您的数据库 就我而言,我收到了这个错误,因为我没有在Startup.cs 中指定以下内容

                      services.AddDbContext<ApplicationDbContext>(options =>
                          options.UseSqlServer(
                              Configuration.GetConnectionString("DefaultConnection"), x => x.MigrationsAssembly("<Your Project Assembly name where DBContext class resides>")));
                  

                  【讨论】:

                    【解决方案19】:

                    使用 ASP.NET Core 3.1 和 EntityFrameWorkCore 3.1.0。仅使用无参数构造函数覆盖上下文类的 OnConfiguring

                    ```protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
                        {
                            if (!optionsBuilder.IsConfigured)
                            {
                                IConfigurationRoot configuration = new ConfigurationBuilder()
                                   .SetBasePath(Directory.GetCurrentDirectory())
                                   .AddJsonFile("appsettings.json")
                                   .Build();
                                var connectionString = configuration.GetConnectionString("LibraryConnection");
                                optionsBuilder.UseSqlServer(connectionString);
                            }
                        }
                    ```
                    

                    【讨论】:

                      【解决方案20】:

                      我遇到了同样的问题,因为我指的是旧的 Microsoft.EntityFrameworkCore.Tools.DotNet

                      <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />
                      

                      升级到新版本后问题解决了

                      【讨论】:

                        【解决方案21】:

                        在主项目的 appsettings.json 文件中,我将“复制到输出目录”设置为“始终复制”并且它起作用了。

                        【讨论】:

                          【解决方案22】:

                          .net 核心控制台应用程序的示例数据库上下文类

                          using Microsoft.EntityFrameworkCore;
                          using Microsoft.EntityFrameworkCore.Design;
                          using Microsoft.Extensions.Configuration;
                          using System.IO;
                          
                          namespace EmailServerConsole.Data
                          {
                              public class EmailDBContext : DbContext
                              {
                                  public EmailDBContext(DbContextOptions<EmailDBContext> options) : base(options) { }
                                  public DbSet<EmailQueue> EmailsQueue { get; set; }
                              }
                          
                              public class ApplicationContextDbFactory : IDesignTimeDbContextFactory<EmailDBContext>
                              {
                                  EmailDBContext IDesignTimeDbContextFactory<EmailDBContext>.CreateDbContext(string[] args)
                                  {
                                      IConfigurationRoot configuration = new ConfigurationBuilder()
                                          .SetBasePath(Directory.GetCurrentDirectory())
                                          .AddJsonFile("appsettings.json")
                                          .Build();
                                      var builder = new DbContextOptionsBuilder<EmailDBContext>();
                                      var connectionString = configuration.GetConnectionString("connection_string");
                                      builder.UseSqlServer(connectionString);
                                      return new EmailDBContext(builder.Options);
                                  }
                              }
                          }
                          

                          【讨论】:

                          • 虽然这可能会回答作者的问题,但它缺少一些解释性文字和文档链接。如果没有围绕它的一些短语,原始代码 sn-ps 并不是很有帮助。您可能还会发现how to write a good answer 非常有帮助。请编辑您的答案。
                          【解决方案23】:

                          您也可以在启动类构造函数中使用将 json 文件(连接字符串所在的位置)添加到配置中。示例:

                              IConfigurationRoot _config;
                              public Startup(IHostingEnvironment env)
                              {
                                  var builder = new ConfigurationBuilder()
                                      .SetBasePath(env.ContentRootPath)
                                      .AddJsonFile("appsettings.json");
                          
                                  _config = builder.Build();
                              }
                          

                          【讨论】:

                            【解决方案24】:

                            对我来说,这是因为我将启动项目的 Output TypeConsole Application 更改为 Class Library

                            恢复到Console Application 成功了。

                            【讨论】:

                              【解决方案25】:

                              我在一个解决方案中遇到了这个问题:

                              • .NET Core 2.2 MVC 项目
                              • .NET Core 3.0 Blazor 项目
                              • .NET Standard 2.0 类库项目中的 DB 上下文

                              当 Blazor 项目设置为启动项目时,我收到“无法创建对象...”消息,但如果 MVC 项目设置为启动项目,则没有。

                              这让我很困惑,因为在包管理器控制台(我正在创建迁移的地方)中,我将默认项目设置为实际包含 DB 上下文的 C# 类库,并且我还指定了我调用 add-migration add-migration MigrationName -context ContextName 中的数据库上下文,所以 Visual Studio 关心当前设置的启动项目似乎很奇怪。

                              我猜原因是当 Blazor 项目是启动项目时,PMC 会从启动项目中确定 .NET 的版本为 Core 3.0,然后尝试使用它在 .NET 上运行迁移标准 2.0 类库并遇到某种冲突。

                              不管是什么原因,将启动项目更改为针对 Core 2.2 的 MVC 项目,而不是 Blazor 项目,解决了问题

                              【讨论】:

                                【解决方案26】:

                                对我来说,问题是我在错误的项目中运行迁移命令。在包含 Startup.cs 的项目而不是包含 DbContext 的项目中运行命令使我能够解决这个特定问题。

                                【讨论】:

                                  【解决方案27】:

                                  在我的例子中,在 init 中设置 StartUp 项目会有所帮助。你可以通过执行来做到这一点

                                  dotnet ef migrations add init -s ../StartUpProjectName
                                  

                                  【讨论】:

                                    【解决方案28】:

                                    Manzur Alahi 是对的!我正在尝试通过 JetBrains 学习 Rider,当我尝试在 Cmd、PowerShell 等中使用 dotnet-ef migrations add ... 时遇到了同样的错误,但是当我使用 Visual Studio IDE 时我没有遇到问题。

                                    我修复了错误:

                                    dotnet ef migrations add InitialMigration --project "Domain.Entities" --startup-project "WebApi"
                                    

                                    这是为了更新数据库

                                    dotnet ef database update --project "Domain.Entities" --startup-project "WebApi"
                                    

                                    就像 Manzur Alahi 说的那样。

                                    【讨论】:

                                      【解决方案29】:

                                      如果上下文类在另一个类库项目中并且出现此错误,请将命令行默认项目更改为上下文项目并将解决方案启动项目设置为主API / ASP.net核心项目(您的DI容器在那里) , 然后重新运行命令 似乎 ef 核心工具包中报告了此错误 https://github.com/dotnet/efcore/issues/23957https://github.com/dotnet/efcore/issues/23853

                                      【讨论】:

                                        【解决方案30】:

                                        我有同样的问题。只需将 ap.jason 更改为 application.jason 即可解决问题

                                        【讨论】:

                                          猜你喜欢
                                          • 1970-01-01
                                          • 2018-01-28
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 2019-03-03
                                          • 2021-10-14
                                          • 2019-11-12
                                          相关资源
                                          最近更新 更多