EF核心1.1到WebApi核心 - 添加迁移失败

问题描述:

我想我的所有依赖运行1.1正确,但是当我尝试按照这里的步骤https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new-db运行添加迁移命令时出现错误。同时呼吁启动类“启动”方法“ConfigureServices”EF核心1.1到WebApi核心 - 添加迁移失败

PM>添加迁移初始化状态

发生错误。我project.json的

Consider using IDbContextFactory to override the initialization of the DbContext at design-time. Error: This method could not find a user secret ID because the application’s entry assembly is not set. Try using the “.AddUserSecrets(Assembly assembly)” method instead. No parameterless constructor was found on ‘ApplicationDbContext’. Either add a parameterless constructor to ‘ApplicationDbContext’ or add an implementation of ‘IDbContextFactory’ in the same assembly as ‘ApplicationDbContext’.

相关章节: ...

“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”))); 

它还能是什么?

另一种解决方案:

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

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

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

+1

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

你的问题是不相关的EF核心,它是关于User Secrets

检查Startup.cs构造 - 它包含AddUserSecrets()电话。你可以删除它。后来,当你阅读关于用户秘密时,你可以添加它与正确的配置(我猜你有网站模板从1.0.0,而引用库1.1.0 - 它包含this bug fix

+0

是与AddUserSecrets()相关的。当我注释掉该行时,我可以添加迁移。 –

+0

但是,您提供的错误修复链接不能解决问题。如果我检查project.json是否存在(如下),迁移仍然失败。 if(env.IsDevelopment()&& builder.GetFileProvider()。GetFileInfo(“project.json”)。Exists) { builder.AddUserSecrets(); }' –

+0

是的,它会失败,因为你正在返回'AddUserSecrets' :)你应该正确配置它。检查https://github.com/aspnet/Announcements/issues/209。 – Dmitry

该问题与致电builder.AddUserSecrets()。要修复执行以下步骤:

  1. 通过添加属性[assembly: UserSecretsId("aspnet-TestApp-ce345b64-19cf-4972-b34f-d16f2e7976ed")]添加用户秘密到组件(而不是仅仅project.json)至Startup.cs

  2. 启动。 CSbuilder.AddUserSecrets<Startup>();

Refe更换builder.AddUserSecrets()伦斯:InvalidOperationException: Could not find 'UserSecretsIdAttribute' on assembly

+0

在我使用的版本中,我可以将用户机密字符串作为参数传递给'builder.AddUserSecrets()'。 –