1 回答

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