将迁移添加到EntityFramework项目时出错

问题描述 投票:0回答:2

在使用EntityFramework的.NETCore MVC后端工作。解决方案即服务项目,EntityFramework项目和API(MVC)项目。 API项目是羡慕点/启动。这是一个现有的项目,有一个初始的迁移文件,我用它来命令行设置数据库:dotnet ef database update。现在,我已经向EntityFramework项目添加了一个新模型,并将相应的public DbSet添加到Context类中。现在我正在尝试为它生成更新迁移文件,以便我可以更新数据库。使用dotnet ef migrations add migration_002给出了以下错误:

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

从EF 1 - > 2中搜索与升级相关的帖子和​​博客......在这种情况下不合适。或者在发生播种时指向创建初始迁移时的问题......再次,在这种情况下也不合适。当我添加-v选项时,我得到更多信息:

Microsoft.EntityFrameworkCore.Design.OperationException:无法创建“StartNetContext”类型的对象。将“IDesignTimeDbContextFactory”的实现添加到项目中,或者查看https://go.microsoft.com/fwlink/?linkid=851728以获取在设计时支持的其他模式。 ---> System.MissingMethodException:没有为此对象定义的无参数构造函数。

啊。什么?我为什么需要那个?搜索该点以重新安排如何配置启动...具体确保。被称为AddDbContext - 它是......

我觉得我要进入圈子......它应该有用......有人创建了初始迁移,所以它必须有效,对吧?

注意:我在Mac上,因此没有使用Package Manager控制台,因此选择目标项目等也不是解决方案。这一切都需要从CLI完成。

entity-framework ef-migrations
2个回答
0
投票

在主项目中添加以下类。

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

希望你的错误消失!


0
投票

所以事实证明,在我的情况下,它是CLI上的一个简单标志......尽管在解决方案中将web api项目标记为启动项目,但我还需要在命令行上指定它。

dotnet ef migrations add migration_002 -s ../MyWebApp.Api

我从this post那里得到了。添加-s标志是有效的,即使没有代码并添加类(我先尝试过,但遇到了return语句的问题)。这是生活中的简单事情。

© www.soinside.com 2019 - 2024. All rights reserved.