深入理解 EF Core:EF Core 寫入資料時發生了什麼?
阿新 • • 發佈:2020-06-19
閱讀本文大概需要 14 分鐘。
> 原文:[https://bit.ly/2C67m1C](https://bit.ly/2C67m1C) > 作者:Jon P Smith > 翻譯:王亮 > 宣告:我翻譯技術文章不是逐句翻譯的,而是根據我自己的理解來表述的。其中可能會去除一些本人實在不知道如何組織但又不影響理解的句子。 ![ ](http://qn-tc.geekgist.com/202006/17221408) 這是深入理解 EF Core 系列的第二篇文章。第一篇是關於 EF Core 如何從資料庫讀取資料的;而這一篇是關於 EF Core 如何向資料庫寫入資料的。這是四種資料庫操作 CRUD(新增、讀取、更新和刪除)中的 CUD 部分。 我假設你對 EF Core 已經有了一定的認識,但在深入學習之前,我們先來了解一下如何使用 EF Core,以確保我們已經掌握了一些基本知識。這是一個“深入研究”的課題,所以我準備大量的技術細節,希望我的描述方式你能理解。 本文是“深入理解 EF Core”系列中的第二篇。以下是本系列文章列表: - [深入理解 EF Core:當 EF Core 從資料庫讀取資料時發生了什麼?](https://mp.weixin.qq.com/s/QDpKpB_pKJM4c1sgIFIN3g) - 深入理解 EF Core:當 EF Core 寫入資料到資料庫時發生了什麼?(本文) - 深入理解 EF Core:使用查詢過濾器軟刪除資料(敬請期待) ## 概要 ∮. EF Core 可以通過新的或已存在的關聯關係建立一個新的實體。為此,它必須以正確的順序來組織實體類,以便能夠建立各類之間的關聯。這使得開發人員很容易寫出具有複雜關聯關係的類。 ∮. 當你呼叫 EF Core 的 Add 命令來新增一個新條目時,會發生很多事情: - EF Core 查詢新增的類和其他類的所有關聯。對於每個關聯的類,它也會判斷是否需要在資料庫中建立一個新行,或者僅僅連結到資料庫中現有的行。 - 它使用現有行的主鍵或偽主鍵為新新增的條目填充外來鍵資訊。 ∮. EF Core 可以監測你從資料庫讀取的類的屬性的變化。它通過已讀入的類的隱藏副本來實現這一點。當你呼叫 SaveChanges 時,它會將每個讀入的屬性值與其原始值進行比較,並且會建立相應的資料更新命令。 ∮. EF Core 的 Remove 方法將刪除引數提供的實體類的主鍵所指向的資料行。如果被刪除的類有外來鍵關聯,那麼資料庫會自動進行相關的操作(比如級聯刪除),但你可以更改刪除的規則。 ## 資料寫入基礎 提示:如果你已經對 EF Core 有一定的瞭解,那麼你可以跳過這一部分,這只是一個簡單的 EF Core 寫入資料的例子。 在這一節的介紹中,我將描述一下本文用到的資料庫結構,然後給出一個簡單的資料庫寫入示例。下面是類/表的基本關係圖: ![ ](http://qn-tc.geekgist.com/202006/17221328) 這些表被對映到具有類似名稱的類,例如 Book、BookAuthor、Author,這些類的屬性名稱與表的欄位名稱相同。由於篇幅有限,我不打算展開來講這些類,但您可以在我的 GitHub 倉庫[1]