为不在启动项目中的dbContext执行迁移

时间:2016-07-08 17:36:25

标签: entity-framework-core

您好我刚刚使用ASP.NET Core 1.0和Entity Framework Core 1.0创建了一个新项目。这是我的项目结构:

enter image description here

我希望避免向DataAccess层添加引用,因为所有调用都必须抛出管理器层以保持解耦,我认为WebApi层不应该知道我正在使用什么DataAccess技术。如果有任何方法不添加对Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"的引用,请告诉我我尝试在Commercify.DataAccess.Catalog中添加它,但收到的错误表明库中不支持类。

我在Commercify.DataAccess.Catalog中创建了以下dbContext:

  public class CatalogDbContext: DbContext
{
    public CatalogDbContext(DbContextOptions<CatalogDbContext> options) 
        : base(options)
    { }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(@"Server=(local)\SQLEXPRESS;Database=Commercify;Trusted_Connection=True;");
    }

    public DbSet<CategoryEntity> Categories { get; set; }
}

现在我希望能够为我安装的迁移添加迁移: 在Commercify.WebApi中有以下程序集:

   "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0",
      "type": "platform"
    },
     ...
    "Microsoft.EntityFrameworkCore.Design": "1.0.0-preview2-final"
  },
  "tools": {
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
  },

我现在想要的是添加一个迁移,为了做到这一点,我执行了以下操作:

dotnet ef migrations add Init

我收到以下错误:

  

在汇编&#39; Commercify.WebApi&#39;中找不到DbContext。确保您使用正确的程序集,并且该类型既不是抽象的也不是通用的。

我记得当使用dnx时你可以添加一个-p命令并将ef指向你的dbContext存在的项目,所以我尝试执行这个

dotnet ef migrations add Init -p Commercify.DataAccess.Catalog

我收到以下错误:

  

无法识别的选项&#39; -p&#39;

如何为不在启动项目中的dbContext执行迁移工具?

1 个答案:

答案 0 :(得分:2)

据我所知,在RTM中执行此操作的唯一方法是从包含上下文的项目运行迁移。 本文概述了使其工作的过程。希望微软能尽快解决这个问题。

http://benjii.me/2016/06/entity-framework-core-migrations-for-class-library-projects/