第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

實(shí)體框架.Remove()與.DeleteObject()

實(shí)體框架.Remove()與.DeleteObject()

12345678_0001 2019-07-25 16:53:20
實(shí)體框架.Remove()與.DeleteObject()您可以使用以下兩種方法從EF中刪除數(shù)據(jù)庫(kù)中的項(xiàng)目。EntityCollection.Remove方法ObjectContext.DeleteObject方法第一個(gè)是EntityCollection第二個(gè),第二個(gè)是ObjectContext。什么時(shí)候應(yīng)該使用?一個(gè)優(yōu)先于另一個(gè)嗎?Remove()返回a bool并DeleteObject()返回void。
查看完整描述

2 回答

?
慕斯王

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊

使用這兩種方法可以“ 從數(shù)據(jù)庫(kù)中刪除項(xiàng)目 ”通常不正確。確切地說(shuō),它是這樣的:

  • ObjectContext.DeleteObject(entity)在上下文中標(biāo)記實(shí)體Deleted。(它EntityStateDeleted后)。如果你打電話SaveChanges后EF發(fā)送SQL DELETE語(yǔ)句到數(shù)據(jù)庫(kù)。如果違反了數(shù)據(jù)庫(kù)中的引用約束,則將刪除該實(shí)體,否則將引發(fā)異常。

  • EntityCollection.Remove(childEntity)標(biāo)記父和childEntityas 之間的關(guān)系Deleted。如果childEntity從數(shù)據(jù)庫(kù)中刪除了自身,并且在調(diào)用時(shí)確實(shí)發(fā)生了什么,SaveChanges取決于兩者之間的關(guān)系類型:

    • 如果關(guān)系是可選的,即從子級(jí)引用到數(shù)據(jù)庫(kù)中的父級(jí)的外鍵允許NULL值,則此外部將被設(shè)置為null,如果調(diào)用SaveChangesNULL值,則將該值childEntity寫(xiě)入數(shù)據(jù)庫(kù)(即兩個(gè)被刪除)。這發(fā)生在SQL UPDATE語(yǔ)句中。沒(méi)有DELETE發(fā)表聲明。

    • 如果需要關(guān)系(FK不允許NULL值)且關(guān)系未識(shí)別(這意味著外鍵不是子(復(fù)合)主鍵的一部分),則必須將子項(xiàng)添加到另一個(gè)父項(xiàng)或你必須明確刪除孩子(DeleteObject當(dāng)時(shí))。如果您不執(zhí)行任何這些操作,則會(huì)違反參照約束,EF會(huì)在您調(diào)用時(shí)拋出異常SaveChanges- 臭名昭著的“ 由于一個(gè)或多個(gè)外鍵屬性不可為空而無(wú)法更改關(guān)系 ”異常或類似。

    • 如果關(guān)系正在識(shí)別(因?yàn)橹麈I的任何部分都不可能是必需的NULL),EF也會(huì)標(biāo)記childEntityDeletedas。如果調(diào)用SaveChangesSQL DELETE語(yǔ)句將被發(fā)送到數(shù)據(jù)庫(kù)。如果未違反數(shù)據(jù)庫(kù)中的其他引用約束,則將刪除該實(shí)體,否則將引發(fā)異常。

我實(shí)際上對(duì)您鏈接的MSDN頁(yè)面上的 “ 備注”部分感到困惑,因?yàn)樗f(shuō):“ 如果關(guān)系具有參照完整性約束,則在依賴對(duì)象上調(diào)用Remove方法會(huì)標(biāo)記關(guān)系和依賴對(duì)象以進(jìn)行刪除。 ”。這對(duì)我來(lái)說(shuō)似乎是不準(zhǔn)確甚至是錯(cuò)誤的,因?yàn)樯厦娴乃腥N情況都有“ 參照完整性約束 ”,但只有在最后一種情況下才會(huì)刪除子。(除非它們與“ 依賴對(duì)象 ” 意味著一個(gè)參與識(shí)別關(guān)系的對(duì)象,但這可能是一個(gè)不尋常的術(shù)語(yǔ)。)


查看完整回答
反對(duì) 回復(fù) 2019-07-25
?
肥皂起泡泡

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊

如果你真的想使用Deleted,你必須使你的外鍵可以為空,但是你最終會(huì)得到孤立的記錄(這是你不應(yīng)該首先做的那個(gè)主要原因之一)。所以只需使用Remove()

ObjectContext.DeleteObject(entity)在上下文中將實(shí)體標(biāo)記為已刪除。(之后刪除了EntityState。)如果之后調(diào)用SaveChanges,EF會(huì)向數(shù)據(jù)庫(kù)發(fā)送SQL DELETE語(yǔ)句。如果違反了數(shù)據(jù)庫(kù)中的引用約束,則將刪除該實(shí)體,否則將引發(fā)異常。

EntityCollection.Remove(childEntity)將parent和childEntity之間的關(guān)系標(biāo)記為已刪除。如果從數(shù)據(jù)庫(kù)中刪除了childEntity本身,并且在調(diào)用SaveChanges時(shí)究竟發(fā)生了什么,取決于兩者之間的關(guān)系類型:

值得注意的是,設(shè)置.State = EntityState.Deleted 不會(huì)觸發(fā)自動(dòng)檢測(cè)到的更改。 檔案


查看完整回答
反對(duì) 回復(fù) 2019-07-25
  • 2 回答
  • 0 關(guān)注
  • 694 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)