1

私のSQLストアドプロシージャでは、いくつかのシナリオで主キーまたは一意のキー違反をスローする挿入と更新を行います。

ADO.net からこの手順を実行しようとすると、.net アプリケーションもその例外をスローし、問題が発生したことを知らせてくれます。

しかし、この手順を EF から実行しようとすると、実行されるだけです。何も表示されず、何も更新されません。

何か問題が発生したことをユーザーにどのように処理または通知する必要がありますか?

Ado.Net コードは

 SqlConnection sqlConnection = new SqlConnection(@"data source=database01; database=test; user id=test; password=test;");
        SqlCommand cmd = new SqlCommand("[uspUpdateTest]", sqlConnection);
        cmd.CommandType = System.Data.CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("RunID", RunID);
        cmd.Parameters.AddWithValue("RunCode", RunCode);
        sqlConnection.Open();
        var str = cmd.ExecuteNonQuery();

Entity Frameworkコードは

 TestEntities context = new TestEntities();
        var str=context.UpdateRun(RunID, RunCode);
4

4 に答える 4

3

関数のインポートで戻り値の型(ダミー)を設定する必要があると確信しています。そうしないと、メソッド名が intellisense に表示されず、context.MethodName を使用してアクセスできなくなるため、ほとんどの場合、これは理にかなっています。

あなたへの私の提案は、関数インポートの戻り値の型を削除して、なしに設定することです。コンテキストのExecuteFunctionメソッドを使用してメソッドを実行します。

Context.ExecuteFunction(関数名,パラメータ)。それは間違いなく例外をスローします。

于 2012-11-03T20:34:56.943 に答える
1

まず、C# コードでキャッチできるストアド プロシージャで例外をスローしていることを確認します。参照 - http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/efea444e-6fca-4e29-b100-6f0c5ff64e59 - 引用:

RAISERROR で SqlException をスローする場合は、その重大度を 10 より大きく設定する必要があります。重大度が 10 以下のエラーは情報であるため、例外をスローしません。

次のコードも示します。Entity Framework を使用してサービス層からデータを取得するときに、MVC コントローラーでこれを使用しています。

try
{

   try
   {
        //Entity Framework/Data operations that could throw the data exception
        //...
   } catch (DataException dex) //see http://msdn.microsoft.com/en-us/library/system.data.dataexception.aspx
   {
      //Specifically handle the DataException
      //...
   }
}
catch (Exception e)
{
   //do something (logging?) for the generic exception
   throw e;
}

最初のキャッチが「e」の例外タイプ/内部例外を確認してそこから移動しない場合は、最後のキャッチにブレークポイントを置くことができます。ジェネリック例外にブレークポイントを設定すると便利です。何かを処理していないときに通知されるからです。

于 2012-11-03T04:41:50.133 に答える
-1

ここでの質問は、例外を適切にキャッチして処理するための非常に優れた要約を提供します。その後、ロールバックなどのためのいくつかのオプションがあります。

于 2012-11-02T13:48:42.983 に答える