[英]entity framework 4.4: how to catch the Sql Exception?
我在數據庫中有一個表,其中包含應用程序的用戶。 用戶名是唯一的,因此我在表中有一個唯一的約束。
我正在做探測,一個嘗試為兩個用戶使用相同的用戶名。 當錯誤發生時,我捕獲異常“Eception”,我可以看到catched異常是System.Data.Entity.Infraestructure.DbUpdateConcurrencyException,內部異常是System.Data.OptimisticConcurrencyException。
然后我捕獲了DbUpdateConcurrencyException,這是一個無關的異常是OptimisticConcurrencyException,所以我也嘗試捕獲這個異常。
如果我嘗試在DbUpdateConcurrencyException之前捕獲OptimisticConcurrencyException,而不是catch,則捕獲DbUpdateConcurrencyException。
所以我不知道如何捕獲SqlException,因為我想捕獲Sql Server的錯誤,以獲取代碼。
謝謝。
你有沒有嘗試過:
try
{
}
catch (SqlException ex)
{
}
你無法處理'內部例外'。 您需要檢查catch
處理程序中拋出的實際異常,並重新判斷是否無法處理它。 例:
try
{
}
catch (DbUpdateConcurrencyException ex)
{
if (CanHandleException(ex))
{
// do what you have to do to handle the exception
}
else
{
throw; // can't handle this exception - just let it bubble up
}
}
在方法CanHandleException
您將編寫確定是否可以處理此異常並執行有意義的操作(可能重試操作)的邏輯。 您可以通過檢查異常的屬性(message,InnerException,...)來完成此操作
你可以處理它使用
var objContext = ((IObjectContextAdapter)ctx).ObjectContext;
var entry = dbUpdateConcurrencyException.Entries.Single();
if (entry.State == EntityState.Deleted)
{
entry.State = EntityState.Detached;
}
else
{
entry.OriginalValues.SetValues(entry.GetDatabaseValues());
objContext.Refresh(RefreshMode.ClientWins,dbUpdateConcurrencyException.Entries.Select(e => e.Entity));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.