ef核心:數據庫中已經有一個對象

asp.net-core database entity-framework entity-framework-core

嗨,我正在使用一個使用ef核心版本的aspnet核心應用程序:

“Microsoft.EntityFrameworkCore.Design”:“1.1.0”,“Microsoft.EntityFrameworkCore.SqlServer”:“1.1.0”

和dotnet標準1.6.1。

這是我的情緒:

  1. 4 dbcontext只有一個數據庫
  2. DBSet或任何其他可以在兩個或三個上下文中顯示,例如AContext包含tableA,BContext也包含tableA。但是沒有一個會包含所有表格,因為我希望特定的上下文關注其目的。
  3. 表之間的許多外鍵

這導致數據庫中的重複表,但為了解決這個問題,我在下面做了

  1. 創建一個MigrationDBContext以包含所有DBSet
  2. 在此MigrationDBContext上添加遷移

這是我得到的

  1. 使用正確的架構和名稱成功創建數據庫和表
  2. 調用時出錯:serviceScope.ServiceProvider.GetService()。Database.Migrate();錯誤消息:數據庫中已經有一個對象'A'。

不幸的是,帶-v的ef核心中的update-database命令不會顯示sql腳本,Script-Migration只顯示簡單的create sql語句。

我的問題是

  1. 如何調試這種情況呢?
  2. 檢查了遷移文件,確實有一個down and up方法,但是這個錯誤似乎ef核心只調用遷移文件中的up方法而不先調用down,並且因為表仍然存在而導致一些dup。那麼,是否有任何開關來控制遷移行為?

一般承認的答案

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



Related

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