1 回答
TA貢獻1951條經驗 獲得超3個贊
主要問題是不同的上下文。值對象(擁有的實體類型)只是一個結果 - 如果沒有值對象,那么您將會遇到另一個問題。
您的設計似乎基于一個錯誤的假設,即只有來自公開暴露的實體類DbSet。但事實并非如此。還包括導航屬性引用的實體,以及它們引用的實體等。
這是合乎邏輯的,因為 EF Core 上下文表示具有表和關系的數據庫。EF Core 需要了解所有相關實體,以便正確支持加載相關數據、查詢(聯接)、級聯刪除、表、列、主鍵和外鍵屬性/列及其映射等。
EF Core 文檔的包含和排除類型部分對此進行了解釋:
按照約定,上下文屬性中公開的類型
DbSet將包含在模型中。此外,OnModelCreating還包括方法中提到的類型。最后,通過遞歸探索已發現類型的導航屬性找到的任何類型也包含在模型中。
調整他們的示例ChildContext,發現以下類型:
Child因為它暴露在DbSet上下文的屬性中Parent因為它是通過Child.Parent導航屬性發現的Address因為它是通過Parent.PrimaryAddress導航屬性發現的
由于ChildContext沒有實體配置,EF 假定與( 和)Parent相關的所有內容均符合約定,因此出現例外。ParentAddress
Shorty,使用包含相關實體的單獨上下文不是一個好主意。解決方案是將所有相關實體放在一個上下文中并進行維護。
查看所使用的術語,您可能關注的是 DDD 和有界上下文,但這些不適合 EF Core(通常在關系數據庫中)模型。
- 1 回答
- 0 關注
- 130 瀏覽
添加回答
舉報
