テスト アプリでエンティティ フレームワークを使用してストアド プロシージャを呼び出しています。
using (CmsEntities context = new CmsEntities())
{
try
{
var test = context.TestSPROC().;
MessageBox.Show(test.ToString());
}
catch (EntityException exc)
{
MessageBox.Show(exc.Message);
}
}
私のストアド プロシージャでは、算術オーバーフロー例外を生成する目的で int を数値に変換するだけです。私は2つの方法でこれをやってみました:
a) convert 関数を使用して変数を設定し、この変数を選択します。
ALTER PROCEDURE [cms].[TestSPROC]
AS
BEGIN
DECLARE @Test INT
SET @Test=CONVERT(NUMERIC(3,2),15)
SELECT @Test AS Test
END
b) 選択中に変換を実行する
ALTER PROCEDURE [cms].[TestSPROC]
AS
BEGIN
SELECT CONVERT(NUMERIC(3,2),15) AS Test
END
どちらも SQL Server Management Studio で算術オーバーフロー例外をスローします。問題は、Visual Studio 2010 で例外をキャッチすることです。
方法 a) を使用すると EntityException がキャッチされ、処理できますが、方法 b) を使用すると、例外は無視され、アプリケーションは問題がないかのように実行され続けます。そのため、Entity Framework が何らかの方法でエラーを隠しているように思えます。