2017-06-19 49 views
3

在我的解決方案,我想用Asp.net核+ EF代碼第一Asp.net核+ EF代碼首先,遷移文件在不同的項目

我有2個項目:

  • 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")則寄託都工作正常變化,但文件遷移文件將在CC.API:/

+1

在包管理器控制檯,從默認的項目的下拉列表中,將其設置爲'CC.Infrastructure'。 – IvanJazz

回答

4

這是/是一個長期存在的問題與EF核心。解決方案使用使您的類庫可執行(臨時),然後針對它運行所有EF操作。

利用當前的工具,你可以只運行Add-Migration而在庫文件夾;唯一需要注意的是您需要將startup-project標誌設置爲實際的可執行文件項目。

於是命令最終被類似:

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

奇怪...「沒有可執行文件找到匹配命令」dotnet-ef「」 – DiPix

+0

@DiPix沒有短劃線;只是一個空間,你也可以嘗試運行'dotnet restore'來確保SDK在你當前的路徑中 – BradleyDotNET

+0

這個破折號只是錯誤的。還是一樣。 – DiPix

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。然後,在File Explorer的地址欄中鍵入cmd以在該文件夾中打開命令提示符。

現在使用下面的命令來創建遷移:

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