4

例外の重複を処理する必要があります。

var resource = new Resource() { url = tbUrl.Text };
try
{
    context.Resource.AddObject(resource);
    context.SaveChanges();
}   
catch(UpdateException ex)
{
    // how to know exactly which is why the error occurred
}
catch (Exception ex)
{

    throw;
}

アップデート:

一意の値を追加しないときに発生するエラーをキャッチする必要があります。UpdateException - データの追加でエラーが発生した場合にトリガーされます。

4

3 に答える 3

6

これは少し遅いかもしれませんが、詳細を探している ASP.NET データベースの更新エラーを抱えている人にとって、InnerException エラー ハンドラーは非常に役立ち、詳細です。

        try { 

            db.SaveChanges();                              
        }

        catch (System.Data.UpdateException ex)    
        {
            Console.WriteLine(ex.InnerException);
        }


        catch (System.Data.Entity.Infrastructure.DbUpdateException ex) //DbContext
        {
            Console.WriteLine(ex.InnerException);
        }

        catch (Exception ex)
        {

            Console.WriteLine(ex.InnerException);
            throw;
        }

データベースの T-SQL は、重複する都市の挿入を防ぎます。

USE [ModelFirstApplication]
GO

/****** Object:  Index [UQ_Address_City]    Script Date: 5/30/2012 7:26:16 AM ******/
ALTER TABLE [dbo].[Addresses] ADD  CONSTRAINT [UQ_Address_City] UNIQUE NONCLUSTERED 
([City] ASC)
GO

したがって、ユーザーがこのデモ アプリケーションの Addresses テーブルにもう一度「Spokane」を挿入しようとすると、上記の例外ハンドラがレポートします。

System.Data.UpdateException: An error occurred while updating the entries. 

See the inner exception for details. ---> 

System.Data.SqlClient.SqlException: Violation of UNIQUE KEY constraint 'UQ_Address_City'. 
Cannot insert duplicate key in object 'dbo.Addresses'. 
The duplicate key value is (Spokane).
The statement has been terminated.

使用する例外ハンドラーを知ることは非常に便利であり、質問は非常に明確です。

于 2012-05-30T05:02:29.300 に答える
0

AppDomain.CurrentDomain.UnhandledExceptionを参照してください。また、WPF アプリケーションの場合、Application.Current.DispatcherUnhandledExceptionを確認するのが理にかなっています

于 2011-07-12T14:25:55.867 に答える
-1

ベスト プラクティスは、例外メッセージとスタック トレースをログ ファイルに書き込み、log4net http://sadi02.wordpress.com/2008/06/29/log4net-tutorial-in- c-net-how-can-i-show-log-in-a-file/

于 2011-07-12T14:24:49.727 に答える