[英]When to use DbSet<T>.Add() vs DbSet<T>.Attach()
我一直在使用Add()
並遇到一個問題,即在Add
子項時父實體在數據庫中被復制。 使用Attach()
解決了這個問題,但我想知道為什么而不是盲目地磕磕絆絆。
好吧,當您使用Attach
您告訴上下文實體已經在數據庫中, SaveChanges
對附加的實體沒有影響。 另一方面, Add
將上下文中實體的狀態(如果它已經存在)更改為Added
,這意味着當您調用SaveChanges
時,它將始終將實體插入到數據庫中。
這就是區別。
如果是 ef-core
附加適用於將新實體添加到具有導航屬性的數據庫的情況。 附加僅將新創建的項目標記為已更改。
假設您要向行業添加一名新員工。 如果該行業已存在於數據庫中,則它必須有一個 ID。 並且您添加的 Employee 尚未插入到數據庫中,因此它還沒有 ID(我在這里談論的是行 ID )。
所以 attach 的作用是因為行業已經有了一個 ID。 附加標記為Unchanged 。 而您尚未附加 ID 的 Employee 將其標記為已添加。
您可以在此處閱讀有關此主題的更多信息: https : //www.learnentityframeworkcore.com/dbcontext/modifying-data#attach
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.