實體框架中的重複關鍵異常?

c# entity-framework exception

我正在嘗試捕獲當我將具有給定用戶名的已存在用戶插入我的數據庫時拋出的異常。正如標題所說,我正在使用EF。當我嘗試將用戶插入到db時拋出的唯一異常是“UpdateException” - 如何提取此異常以識別它是重複的異常還是別的?

一般承認的答案

catch (UpdateException ex)
{
    SqlException innerException = ex.InnerException as SqlException;
    if (innerException != null && innerException.Number == ??????)
    {
        // handle exception here..
    }
    else
    {
        throw;
    }
}

把正確的號碼放在??????這對應於唯一約束違規(我不知道從頭到尾)。


熱門答案

因為我在C#中使用EntityFramework,所以我不得不對此做一點改動 - 希望它對任何人有幫助......

try
{
    await db.SaveChangesAsync();
}
catch (DbUpdateException ex)
{
    SqlException innerException = ex.InnerException.InnerException as SqlException;
    if (innerException != null && (innerException.Number == 2627 || innerException.Number == 2601))
    {
        //your handling stuff
    }
    else
    {
        throw;
    }
}

我的問題是因為我需要DbUpdateException而不是UpdateException,而我的InnerException對像有一個額外的InnerException對象,其中包含我需要的數字......



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因