簡體   English   中英

如何以級聯方式刪除?

[英]How can I delete in cascade?

我用postgresql創建了一個數據庫:

elt {
    id : bigserial,
    elt_name : character varying(40),
}

history_elt {
    id : bigserial,
    previous_elt_id : bigint , // (with on update no action and on delete no action)
    reason : character varying(250)
}

但我想在我的應用程序中擁有一個超級管理員用戶,這樣用戶只有在他是超級管理員的情況下才能級聯刪除。

可以使用實體框架來實現它,因為我這樣做

[HttpDelete("[Action]{id}")]
public async Task<ActionResult<Elt>> DeleteCascade(int id)
{
    try
    {
        var elt = await _context.Elts.FirstOrDefaultAsync(t => t.Id == id);
        var historyEltToDelete= _context.HistoryElts.Where(t => t.PreviousEltId == elt .Id);

        _context.Elts.Remove(elt);
        _context.SaveChanges();

        historyEltToDelete.Reason= "Delete of elt"+elt.EltName;



 _context.Entry(historyEltToDelete).CurrentValues.SetValues(historyEltToDelete);
                    _context.SaveChanges();

                return Ok(historyEltToDelete);

    }
    catch (Exception ex)
    {
        return BadRequest(ex.Message);

    }

}

當我想嘗試刪除elt時,我有以下錯誤消息:

表“elt”上的更新或刪除違反表“history_elt”上的外鍵約束“previous_elt_id_fkey”

我該如何解決我的問題?

您似乎正在嘗試刪除具有主鍵的行,該行由來自另一行/表的外鍵引用

主鍵位於“elt”中,外鍵是“history_elt”上的“previous_elt_id_fkey”

因此,當列允許NULL值時,您需要從引用此主鍵的其他行/表中刪除值。 或者您也刪除了引用行。

或者您更改列以允許空值。

或者我的另一個想法,因為我喜歡處理它:

添加到“elt”列BIT(布爾值)類型並添加到您的查詢中,它不應處理將此列設置為true的行。 給出的例子:

SELECT * FROM eft WHERE bitColumn = 'false'

然后你不需要刪除該行,只需將BIT列標記為true即可

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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