Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 无法迁移实体框架核心中的DbContext类_Asp.net_Asp.net Core_Entity Framework Core - Fatal编程技术网

Asp.net 无法迁移实体框架核心中的DbContext类

Asp.net 无法迁移实体框架核心中的DbContext类,asp.net,asp.net-core,entity-framework-core,Asp.net,Asp.net Core,Entity Framework Core,我现在正在使用ASP.NET核心web api开发web api。这是我第一次使用ASP.NET内核。我是一名ASP.NETMVC开发人员。但是我离开了一段时间。我现在要做的是为运行迁移命令的实体框架创建一个DbContext类。但我使用三个不同的项目来分离逻辑 这是我的项目结构: [![在此处输入图像描述][1][1] 我安装了以下软件包 Install-Package Microsoft.EntityFrameworkCore.SqlServer -Projectname thegoody

我现在正在使用ASP.NET核心web api开发web api。这是我第一次使用ASP.NET内核。我是一名ASP.NETMVC开发人员。但是我离开了一段时间。我现在要做的是为运行迁移命令的实体框架创建一个
DbContext
类。但我使用三个不同的项目来分离逻辑

这是我的项目结构:

[![在此处输入图像描述][1][1]

我安装了以下软件包

Install-Package Microsoft.EntityFrameworkCore.SqlServer  -Projectname thegoodyard.api
Install-Package Microsoft.EntityFrameworkCore.Tools  -Projectname thegoodyard.api
Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design  -Projectname thegoodyard.api
Install-Package Microsoft.EntityFrameworkCore.SqlServer  -Projectname thegoodyard.domain
Install-Package Microsoft.EntityFrameworkCore.Tools  -Projectname thegoodyard.domain
Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design  -Projectname thegoodyard.domain
thegoodyard.domain
项目中,我创建了一个名为
ThegoodyardContext.cs
的DB上下文类,定义如下

namespace thegoodyard.domain.Concrete
{
    public virtual DbSet<Category> Categories { get; set; }

    public partial class ThegoodyardContext: DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if(!optionsBuilder.IsConfigured)
            {
                optionsBuilder.UseSqlServer(@"Server=(localdb)\\mssqllocaldb;Database=ThegoodyardContext;Trusted_Connection=True; MultipleActiveResultSets=true");
            }
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
        }
    }
}
然后,我运行以下命令启用了迁移

enable-migration -projectname thegoodyard.api
但是它说,这个命令太旧了,请改用add迁移。我用这个代替了

add-migration CreateCategory
然后我得到了下面的错误

访问类“Program”上的IWebHost时出错。在没有应用程序服务提供商的情况下继续。错误:已使用配置调用AddDbContext,但上下文类型“ThegoodyardContext”仅声明无参数构造函数。这意味着将永远不会使用传递给AddDbContext的配置。如果将配置传递给AddDbContext,那么“GoodyardContext”应该声明一个接受DbContextOptions的构造函数,并且必须将其传递给DbContext的基本构造函数

在程序集“thegoodyard.api”中未找到DbContext。确保使用的程序集正确,并且类型既不是抽象的也不是泛型的


如何修复它?

打开软件包管理器控制台

默认项目:“选择图层名”,如:
thegoodyard.domain
然后

启用迁移

请检查此链接

从这个问题上看,不清楚您是在运行EF Core还是EF 6。对于EF6,使用无参数构造函数,EF核心项目在参数中注入
DbContextOptions
。如果您使用的是EF Core,则错误消息会清楚地说明错误:您从DbContext中进行了derieve,并且您只是声明了一个无参数构造函数,或者您使用的是EF 6
add-migration CreateCategory