【问题标题】:entity framework core migrations do not work with class library, yet?实体框架核心迁移不适用于类库吗?
【发布时间】:2018-06-12 15:26:20
【问题描述】:

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

<TargetFramework>net471</TargetFramework>

该项目引用另一个类库项目“Repository”,目标为:

<TargetFramework>netstandard1.4</TargetFramework>

“Api”项目已配置:

services
.AddEntityFrameworkSqlServer()
.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
    b => b.MigrationsAssembly("Repository"))
)
.AddScoped(p => new ApplicationDbContext(p.GetService<DbContextOptions<ApplicationDbContext>>()));

当我在 PMConsole 中时,我输入:

添加-迁移初始

然后我得到这个错误:

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

我做错了什么?

【问题讨论】:

    标签: entity-framework-core asp.net-core-2.0 entity-framework-migrations


    【解决方案1】:

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

    有关详细信息,请参阅documentation

    【讨论】:

    • 我对 .net 核心库没有任何疑问。
    • 我的上下文是从启动项目中创建的,但我的 dbcontext 是在类库中定义的,我已经完成了 contextfactory,如图所示,但是当我运行 Add-Migration 时,我开始收到错误消息由 OP 描述。知道实际导致 ArgumentOutOfRangeException 的原因是什么吗?
    猜你喜欢
    • 2020-06-21
    • 1970-01-01
    • 2021-06-27
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 2017-04-06
    相关资源
    最近更新 更多