簡體   English   中英

何時使用 DbSet<T> .Add() 與 DbSet<T> 。附()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM