无法在Entity Framework Core中迁移DbContext类

时间:2018-09-16 11:08:40

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

我现在正在使用ASP.NET核心Web API开发Web API。这是我第一次使用ASP.NET Core。我是ASP.NET MVC开发人员。但是已经有一段时间了。我现在正在为运行迁移命令的Entity Framework创建一个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的数据库上下文类,其定义如下。

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

然后在Thegoodyard.api项目的ConfigureServices类的StartUp方法中,我这样注册上下文:

public void ConfigureServices(IServiceCollection services)
{
     services.AddMvc();

     services.AddDbContext<thegoodyard.domain.Concrete.ThegoodyardContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("ThegoodyardContext")));
}

然后我运行以下命令启用迁移

enable-migration -projectname thegoodyard.api

但是它说,命令太旧了,请改用add-migration。我改用这个。

add-migration CreateCategory

然后我遇到了以下错误

  

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

     

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

我该如何解决?

1 个答案:

答案 0 :(得分:1)

打开软件包管理器控制台

  

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

Enable-Migrations

请检查此链接 http://www.entityframeworktutorial.net/code-first/code-based-migration-in-code-first.aspx