Entity framework core 实体框架核心迁移还不能与类库一起使用吗?

Entity framework core 实体框架核心迁移还不能与类库一起使用吗?,entity-framework-core,asp.net-core-2.0,entity-framework-migrations,Entity Framework Core,Asp.net Core 2.0,Entity Framework Migrations,我有一个asp.net核心项目“Api”,目标是: <TargetFramework>net471</TargetFramework> <TargetFramework>netstandard1.4</TargetFramework> 我错在哪里?EF Core命令仅适用于启动项目,即可以实际运行的项目,而不是类库。这是因为上下文是通过依赖注入创建的,依赖注入只能在运行时发生。解决方法是在类库中创建IDesignTimeDbContextFac

我有一个asp.net核心项目“Api”,目标是:

<TargetFramework>net471</TargetFramework>
<TargetFramework>netstandard1.4</TargetFramework>

我错在哪里?

EF Core命令仅适用于启动项目,即可以实际运行的项目,而不是类库。这是因为上下文是通过依赖注入创建的,依赖注入只能在运行时发生。解决方法是在类库中创建
IDesignTimeDbContextFactory
的实现。当命令看到您的实现时,该工厂将用于实例化上下文

public class MyContextFactory : IDesignTimeDbContextFactory<MyContext>
{
    public MyContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<MyContext>();
        optionsBuilder.UseSqlServer("[connection string here]");

        return new MyContext(optionsBuilder.Options);
    }
}
公共类MyContextFactory:IDesignTimeDbContextFactory
{
公共MyContext CreateDbContext(字符串[]args)
{
var optionsBuilder=new DbContextOptionsBuilder();
optionsBuilder.UseSqlServer(“[此处的连接字符串]”);
返回新的MyContext(optionsBuilder.Options);
}
}

欲了解更多信息,请参阅。

我对.net核心库没有任何问题。我的上下文是从启动项目中创建的,但是我的dbcontext是在类库中定义的,我已经完成了如图所示的contextfactory,但是当我运行Add Migration时,我开始出现OP所述的错误。知道是什么导致ArgumentOutOfRangeException吗?
Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
add-migration : Exception calling "Substring" with "1" argument(s): "StartIndex cannot be less than zero.
Parameter name: startIndex"
At line:1 char:1
+ add-migration
+ ~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Add-Migration], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentOutOfRangeException,Add-Migration
public class MyContextFactory : IDesignTimeDbContextFactory<MyContext>
{
    public MyContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<MyContext>();
        optionsBuilder.UseSqlServer("[connection string here]");

        return new MyContext(optionsBuilder.Options);
    }
}