Asp.net核心+ EF代码首先在不同项目中迁移文件

时间:2017-06-19 18:51:10

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

在我的解决方案中,我想首先使用Asp.net核心+ EF代码

我有两个项目:

  • CC.API
  • CC.Infrastructure

在CC.API中我有启动课,有:

services.AddDbContext<DataContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"), b => b.MigrationsAssembly("CC.Infrastructure")));

(连接字符串在appsettings.json中)

正如您所看到的,我正在尝试将迁移文件保存在不同的项目中 - CC.Infrastructure。

不幸的是,Add-Migration Init我收到错误: 您的目标项目“PK.API”与您的迁移程序集“PK.Infrastructure”不匹配。更改目标项目或更改迁移程序集

如果我在启动时更改b => b.MigrationsAssembly("CC.API"),那么everthing工作正常,但文件迁移文件将在CC.API中:/

3 个答案:

答案 0 :(得分:5)

这是EF Core的长期问题。解决方案使用使您的类库成为可执行文件(暂时),然后针对它运行所有EF操作。

使用当前工具,您可以在库文件夹中运行Add-Migration;唯一需要注意的是,您需要将startup-project标志设置为实际的可执行项目。

所以命令最终会像:

C:\CC.Infrastructure>dotnet ef migrations add NewMigration --startup-project ../CC.API/CC.API.csproj

答案 1 :(得分:0)

您必须将Microsoft.EntityFrameworkCore.Tools.DotNet添加到CC.Infrastructure项目中。右键单击该项目,然后选择Edit *.csproj。然后,添加以下内容:

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0-preview2-final" />
  </ItemGroup>

您无法从Nuget包管理器添加此内容。它必须直接添加到项目中。

一旦你这样做了。您可以将启动项目设置为CC.API来运行该命令。转到类库的文件夹。右键单击项目和Open Folder in File Explorer的最简单方法。然后,在cmd的地址栏中键入File Explorer,以在该文件夹中打开命令提示符。

现在使用以下命令创建迁移:

dotnet ef migrations add InitialCreate -c DataContext --startup-project ../CC.API/CC.API.csproj

答案 2 :(得分:0)

如IvanZazz所说

  1. 将UI / Web项目设置为启动项目
  2. 在“程序包管理器控制台”下拉菜单中将“基础结构”设置为默认项目,选择用于程序包管理器控制台的默认项目,将其设置为CC.Infrastructure或具有DbContext类的项目
  3. 现在在软件包管理中运行此命令
  

添加迁移InitialIdentityModel

enter image description here