具有多個DBContexts的EF 7遷移

entity-framework-core

我有一個問題腳手架和從具有多個DBContexts的類庫進行遷移。我找到了一個類似於遷移的命令行參數:

dnx ef migration add -c Contexts.IndustryContext initial

但這甚至不能通過命令行解析器獲得。我希望我的所有DBContexts和數據庫內容都來自主MVC 6 Web項目和他們自己的DLL。這可能嗎?需要什麼命令行魔法?

一般承認的答案

我正在尋找這個問題的答案,並希望為ef core 2.0提供我的解決方案。

需要將Microsoft.EntityFrameworkCore.Tools.DotNet添加到其中包含DbContext每個類庫中。右鍵單擊該項目,然後選擇Edit *.csproj 。然後,添加以下內容:

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

注意:該版本是本文發佈時的最新版本,將來可能會發生變化。

接下來,我創建了一個名為Migrations.Console的新控制台應用程序(.NET Core),並將其添加到我的解決方案中。您必須在此項目中引用所有DbContext類庫。

我安裝了Microsoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.Design Nuget包。

Migrations.Console應用程序中,我為每個Db上下文創建了一個DbContextFactory類。

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

注意:確保更新上下文和連接字符串以匹配項目。

現在每個DbContextFactory創建,您可以開始創建遷移。轉到類庫的文件夾。右鍵單擊項目並Open Folder in File Explorer的最簡單方法。然後,在File Explorer的地址欄中鍵入cmd以在該文件夾中打開命令提示符。

現在使用以下命令創建遷移:

dotnet ef migrations add InitialCreate -c ApplicationDbContext --startup-project ../Migrations.Console/Migrations.Console.csproj

注意:更改ApplicationDbContext以匹配您正在使用的上下文的名稱。此外,如果您通過其他名稱調用控制台項目,則需要更改路徑和名稱。

您現在應該在類庫中看到一個Migrations文件夾。


熱門答案

我還沒有嘗試將數據層放在一個單獨的項目中,但我在一個Web API項目中確實有多個DbContexts。它也應該與單獨的項目一起使用。

使用最新語法(v1.0.0),您可以創建如下遷移:

dotnet ef migrations add <migration-name> -o <output-directory> -c <context>

其中<context>是DbContext的完整類名 - 比如MyProject.Data.MyDbContext

我將針對不同上下文的遷移放入不同的目錄中,但我認為您不必這樣做。只需確保它們具有不同的migration-name值。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因