我在我的测试应用程序中使用实体框架调用存储过程:
using (CmsEntities context = new CmsEntities())
{
try
{
var test = context.TestSPROC().;
MessageBox.Show(test.ToString());
}
catch (EntityException exc)
{
MessageBox.Show(exc.Message);
}
}
在我的存储过程中,我所做的只是将一个 int 转换为一个数字,目的是生成一个算术溢出异常。我尝试通过两种方式做到这一点:
a) 使用转换函数设置变量并选择该变量。
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) 异常被忽略并且应用程序继续运行,就好像没有问题一样。所以在我看来,实体框架似乎以某种方式隐藏了错误。