我正在关注如何使用.netcore设置我的第一个web api的一些教程。我在尝试运行第一次迁移时遇到问题:
PM> Add-Migration InitialMigration
Exception calling ".ctor" with "1" argument(s): "The parameter 'frameworkName' cannot be an empty string.
Parameter name: frameworkName"
我理解它说有一个构造函数,其中一个参数是空的;但是,我不知道这个“frameworkName”参数在哪里。我假设它是一些内部EF机制。
此错误消息引用了哪个类?
这是我的简单实体设置
public class ShackupContext : DbContext
{
public DbSet<Post> Posts { get; set; }
public ShackupContext(DbContextOptions<ShackupContext> options):base(options)
{
}
}
public class Post
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
[MaxLength(200)]
public string Name { get; set; }
}
更新1 我更新了我的dbcontext以调用@ViktorsTelle建议的基类构造函数。
我的项目设置与我所遵循的任何教程不同。主要区别在于我的实体包含在他们自己的项目中,而不是在api项目本身
这让我相信在Shackup.Data项目上运行Add-Migration并不需要我在我的api项目中注册我的dbcontext。无论如何我都是这么做的,看看会发生什么:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddDbContext<ShackupContext>(o =>
o.UseNpgsql(Configuration["connectionStrings:postgres"],
a => a.MigrationsAssembly("Shackup.Data")));
}
一旦我这样做了,我设法在迁移过程中进一步了解。我现在得到了
PM> Add-Migration InitialMigration
The specified deps.json [C:\Users\campo\Documents\Visual Studio 2015\Projects\Shackup\src\Shackup.Api\bin\Debug\netcoreapp1.1\Shackup.Api.deps.json] does not exist
Process finished with non-zero exit code
所以我看了看那个目录,确实它丢失了文件;但是,该文件正在输出到该目录的子文件夹。
deps.json文件位于win10-x64文件夹中。我可以简单地复制并粘贴到所需的文件夹,但现在我遇到了一个新问题:
为什么Nuget包管理器控制台看错了目录?
或者可能:我怎样才能改变它以找到正确的位置?
更新2
我已更新了两个项目中的所有项目依赖项。以下是数据和下面的api项目的两个文件
API
{
"dependencies": {
"Microsoft.AspNetCore.Mvc": "1.1.0",
"Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
"Microsoft.EntityFrameworkCore": "1.1.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.1.0",
"Microsoft.Extensions.Configuration.FileExtensions": "1.1.0",
"Microsoft.Extensions.Configuration.Json": "1.1.0",
"Microsoft.Extensions.Logging": "1.1.0",
"Microsoft.Extensions.Logging.Console": "1.1.0",
"Microsoft.Extensions.Logging.Debug": "1.1.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.1.0",
"Microsoft.NETCore.App": "1.1.0",
"Shackup.Data": "1.0.0-*",
"Npgsql.EntityFrameworkCore.PostgreSQL": "1.1.0",
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final"
},
"tools": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final",
"Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final"
},
"frameworks": {
"netcoreapp1.1": {
"imports": [
"dotnet5.6",
"portable-net45+win8"
]
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
},
"runtimes": {
"win10-x64": {},
"win81-x64": {}
},
"publishOptions": {
"include": [
"wwwroot",
"**/*.cshtml",
"appsettings.json",
"web.config"
]
},
"scripts": {
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
DATA
{
"version": "1.0.0-*",
"dependencies": {
"Microsoft.EntityFrameworkCore": "1.1.0",
"Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final",
"NETStandard.Library": "1.6.1"
},
"frameworks": {
"netstandard1.6": {
"imports": "dnxcore50"
}
},
"tools": {
"Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final"
}
}
答案 0 :(得分:7)
在解决方案中选择正确的启动项目:右键单击解决方案资源管理器中的项目,选择“设置为启动项目”
答案 1 :(得分:1)
选择您的实体包含为“启动项目”的项目(在解决方案资源管理器中右键单击您的项目,然后选择“设置为启动项目”),并确保安装了Microsoft.EntityFrameworkCore.Design软件包。可能这不是最佳解决方案,但解决了我同样的问题。
答案 2 :(得分:0)
在我的情况下,全新的.Net Core 2.2 MVC应用程序通过选择启动对象解决了该问题: