向EntityFramework项目添加迁移时出错

时间:2018-09-07 15:26:14

标签: entity-framework ef-migrations

在使用EntityFramework的.NETCore MVC后端上工作。 解决方案即服务项目,EntityFramework项目和API(MVC)项目。 API项目是令人羡慕的起点/起点。 这是一个现有项目,并且有一个初始迁移文件,我使用该文件从命令行使用dotnet ef database update来设置数据库。 现在,我向EntityFramework项目添加了一个新模型,并向Context类添加了适当的public DbSet。现在,我正在尝试为其生成更新迁移文件,以便可以更新数据库。 使用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:否   为此对象定义的无参数构造函数。

U。什么?我为什么需要那个?搜索指向重新安排启动程序的配置方式……特别要确保该配置。 AddDbContext正在被呼叫-是

我觉得我要转圈...应该可以使用...有人创建了初始迁移,所以它必须可以使用,对吧?

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

2 个答案:

答案 0 :(得分: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);
    }
}

希望您的错误会消失!

答案 1 :(得分:0)

因此,在我看来,这只是CLI上的一个简单标志...尽管在解决方案中将Web api项目标记为启动项目,但我也需要在命令行上指定它。

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

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