【问题标题】:EF Core 1.1 to WebApi Core - Add-Migration failsEF Core 1.1 到 WebApi Core - 添加迁移失败
【发布时间】:2017-04-12 23:49:58
【问题描述】:

我认为我的所有依赖项都在正常运行 1.1,但是当我尝试按照https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new-db 此处的步骤操作时,我在运行 Add-Migration 命令时遇到错误。

PM> Add-Migration InitialState

在启动类“Startup”上调用方法“ConfigureServices”时出错。

考虑使用 IDbContextFactory 覆盖初始化 设计时的 DbContext。错误:此方法找不到用户 秘密 ID,因为未设置应用程序的入口程序集。尝试 改用“.AddUserSecrets(Assembly assembly)”方法。不 在“ApplicationDbContext”上找到了无参数构造函数。任何一个 将无参数构造函数添加到“ApplicationDbContext”或添加 在同一个程序集中实现“IDbContextFactory” ‘ApplicationDbContext’。

我的 project.json 的相关部分: …

 “Microsoft.EntityFrameworkCore”: “1.1.0”,
“Microsoft.EntityFrameworkCore.SqlServer”: “1.1.0”,
“Microsoft.EntityFrameworkCore.Design”: {
“type “: “build”,
“version”: “1.1.0”
},
“Microsoft.EntityFrameworkCore.Tools”: “1.1.0-preview4-final”
},

“tools”: {
“Microsoft.EntityFrameworkCore.Tools.DotNet”: “1.1.0-preview4-final”
},

我的 ApplicationDbContext 确实有构造函数:

public ApplicationDbContext(DbContextOptions options) : base(options)
 { }

我的 Startup.cs 确实有:

services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString(“DefaultConnection”)));

还能是什么?

【问题讨论】:

    标签: c# .net entity-framework asp.net-core entity-framework-core


    【解决方案1】:

    该问题与builder.AddUserSecrets() 通话有关。要修复,请执行以下步骤:

    1. 通过将属性[assembly: UserSecretsId("aspnet-TestApp-ce345b64-19cf-4972-b34f-d16f2e7976ed")] 添加到Startup.cs,将用户密码添加到程序集(而不仅仅是project.json

    2. Startup.cs 中将 builder.AddUserSecrets() 替换为 builder.AddUserSecrets<Startup>();

    参考:InvalidOperationException: Could not find 'UserSecretsIdAttribute' on assembly

    【讨论】:

    • 在我使用的版本中,我可以将用户机密字符串作为参数传递给builder.AddUserSecrets()
    【解决方案2】:

    另一种解决方案:

    我遇到了同样的问题并降落在这里。但我正在从头开始编写一个应用程序,在每一步都将它与带有个人身份验证的 DotNetCore WebApp 进行比较。通过 VS 2017 中的向导生成,希望遵循最新的做法。因此,当我的代码和生成的代码中的所有内容都相同并且我遇到此异常时,这很奇怪。生成的代码在 startup.cs 中没有 Michael Dennis 建议的代码,这并不意味着他错了,只是意味着现在有了不同的方式。深入研究后,我发现 UserSecretsId 在 myprojetname.csproj 中声明如下:

    <PropertyGroup>
        <UserSecretsId>aspnet-mywebproect-006a401f-2fdc-4aad-abb1-12c00000004a</UserSecretsId>
    </PropertyGroup>
    

    在我的 project.csproj 文件中添加条目后,问题已解决。

    【讨论】:

    • 谢谢哈桑。是的,我的上述解决方案适用于 VS2015。我最近将我的项目升级到 VS2017 并将其放入 CSPROJ 而不是 project.json 现在似乎可以正常工作,因此您不再需要该属性了。
    【解决方案3】:

    您的问题与 EF Core 无关,与 User Secrets 有关

    检查您的 Startup.cs 构造函数 - 它包含 AddUserSecrets() 调用。你可以删除它。稍后,当您阅读有关 User Secrets 的内容时,您可以使用正确的配置将其添加回来(我猜您有来自 1.0.0 的网站模板,同时引用库 1.1.0 - 它包含 this bug fix

    【讨论】:

    • Yes 与 AddUserSecrets() 有关。当我注释掉该行时,我可以添加迁移。
    • 但是,您提供的错误修复链接并不能解决问题。如果我检查 project.json 是否存在(如下),迁移仍然失败。 if (env.IsDevelopment() &amp;&amp; builder.GetFileProvider().GetFileInfo("project.json").Exists) { builder.AddUserSecrets(); }
    • 是的,它会失败,因为你返回AddUserSecrets :) 你应该正确配置它。检查github.com/aspnet/Announcements/issues/209
    猜你喜欢
    • 2017-11-30
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 2020-03-19
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多