1

嗨,我上的ASPNET核心應用程序,它使用EF核心版本命名爲工作對象:EF核心:目前已經在數據庫

「Microsoft.EntityFrameworkCore.Design」:「1.1.0」 , 「Microsoft.EntityFrameworkCore.SqlServer」:「1.1.0」

和dotnet標準1.6.1。

這裏是我的scenaro:

  1. 4的DbContext只有一個數據庫
  2. DBSet或任何其它可以在兩個或三個上下文,例如AContext包含表A顯示, BContext還含有TABLEA。但他們都不會包括所有的表格,因爲我希望特定的上下文關注它的目的。表之間
  3. 許多foreigne鍵

這將導致數據庫中的DUP表,但要解決這個問題,我在下面

  1. 完成創建MigrationDBContext包括所有DBSet
  2. 在這個MigrationDBContext添加遷移

這裏是我所得到的

  1. 成功創建數據庫,並與合適的模式和名稱
  2. 錯誤表時,電話:serviceScope.ServiceProvider.GetService()Database.Migrate()。 錯誤消息:數據庫中已存在一個名爲「A」的對象。

unfortunitly,與-v EF核心將不會顯示SQL腳本更新數據庫命令,腳本遷移只顯示簡單的創建SQL語句。

我的問題是

  1. 如何將這種這種情況調試?
  2. 檢查了遷移文件,確實有一種向下和向上的方法,但是這個錯誤看起來像ef核心只調用遷移 文件中的up方法而沒有首先調用down,並且導致一些dup,因爲表 仍然是那裏。那麼,是否有任何切換來控​​制遷移行爲?

回答

0

最簡單的方法是創建一個的DbContext,其中將包括實體和它們之間的關係的所有集合。之後,您可以將存儲邏輯與存儲庫分開。 困難的方法是爲每個上下文創建特定於上下文的遷移。如果您需要添加一組存在於另一個上下文中的實體 - 您需要爲該上下文創建一個空的遷移。這是一個有點骯髒的方式。