EF Core迁移错误:“无法创建类型为'ApplicationContext'的对象”

13

我正试图使用EF Core进行迁移,但出现了错误 - 我该如何修复这个错误?

PM> add-migration ini
无法创建类型为'ApplicationContext'的对象。请向项目添加一个'IDesignTimeDbContextFactory'的实现,或参见 https://go.microsoft.com/fwlink/?linkid=851728 以获取设计时支持的其他模式。

你目前使用的 EF Core 版本是什么? - user4851087
1
在运行以上命令前,请确保您已在程序包管理器控制台中选择了默认项目(其中包含DBContext),并且已将您的宿主项目(其中包含startup.cs)选为启动项目。 - Vivek Nuna
10个回答

11
这也会发生在你有多个启动项目的情况下-在迁移时,只需选择一个(在VS中右键单击解决方案并设置启动项目...)。

3
选择主要应用程序对我来说已经足够了。谢谢。 - Eliaquín
1
在迁移时更改解决方案中的启动项目并不是一个好主意,最好通过 -StartupProject 在包管理器控制台中设置启动项目。 - Mohammad Niazmand

9
我遇到了与 asp.net core 3.1 相同的问题。 对我来说,解决方法很简单,在主 web 项目中添加一个 IDesignTimeDbContextFactory 的实现即可解决问题。
基本实现如下所示:
public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<YourDbContext>
{
    public YourDbContext CreateDbContext(string[] args)
    {
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();
        var builder = new DbContextOptionsBuilder<YourDbContext >();
        var connectionString = configuration.GetConnectionString("DefaultConnection");
        builder.UseSqlServer(connectionString);
        return new YourDbContext(builder.Options);
    }
}

请参考该主题的this博客文章。

3
很可能是因为您的默认启动项目:
打开软件包管理器控制台并输入以下命令:
 PM> Add-Migration -StartupProject[YourProjectPath(just press a tab all the.csproj paths will come up, and then choose your DataBaseLayer project to execute a migration for)] migrationName

以这种方式,当你完成添加新的迁移时,你不需要再去解决方案设置启动项与你的Web项目。

2
我遇到了这个错误,是因为我有两个独立的项目:Data Models和ApplicationContext被定义在MyProject.Data中,而Program.cs在MyProject.UI中。所以我必须按照以下方式指定它们:
dotnet ef migrations add v1.0 --project MyProject.Data --startup-project MyProject.UI

1
在创建迁移时,我遇到了这个错误。在我的代码中的ApplicationContext构造函数中,我使用了Database.EnsureCreated()方法。通常情况下,此方法用于需要检查数据库是否存在并创建它的小型应用程序。当创建一个具有随新版本更改的数据库并使用迁移的应用程序时,不应使用此方法。

0

1. 在 ConfigureService 中修改您的代码:

options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),

        x => x.MigrationsAssembly("WebApplication")));
  1. 在包含WebApplication.csproj的命令行中:

dotnet ef migrations add Init


0

当表的主键没有手动设置(使用属性或FluentAPI)且没有自动确定(不是“Id”关键字,也不是“TableName”+“Id”)时,我遇到了这个错误。

堆栈:ASP.NET Core EF + Postgres (Npgsql)


0

0
我通过向ApplicationContext添加一个构造函数来解决了这个问题。

0
这个错误信息并不明显,但是如果在DbContext的构造函数或者OnConfiguring方法中有任何异常,也会出现这个错误信息。
例如,Database.EnsureCreated()可能因为连接字符串不正确或者数据库被禁用而失败。 提示:为了找到问题的根源,只需将代码放在try catch块中,并使用Console.WriteLine();显示异常信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接