实体框架中的数据库错误处理

时间:2012-05-01 13:59:59

标签: c# .net sql-server entity-framework error-handling

我写的存储过程有时会 RAISERROR()。 我通过实体框架执行它,如:

using( MyModelEntities conn = new MyModelEntities() ) {
    conn.MyStoredProcedure(input_p, output_p);
}

存储过程:

create procedure dbo.MyStoredProcedure(
    @input   nvarchar(255),
    @output int out
)
as
begin
    ...
        RAISERROR (N'My Exception....', 10, 1);
    ...
end
go

有没有机会获取有关错误的信息?

3 个答案:

答案 0 :(得分:3)

在sql server中,异常级别1到10是信息性的,不会将错误引发回应用程序。

将级别更改为11到16之间,以提高SP的错误。

答案 1 :(得分:2)

这可以放入try / catch并显示异常吗?或者也许你可以尝试进入调试模式?

答案 2 :(得分:0)

以下是我处理这个问题的方法:

create procedure dbo.MyStoredProcedure(
    @input   nvarchar(255),
    @output  text out
)
as
begin
    ...
      SELECT @message = convert(varchar, getdate(), 108) + ': My Exception....'
      SET @output = CAST(@message AS text) -- send message to c#/.net
      RAISERROR(@message,0,1) WITH NOWAIT  -- send message to SQL Server Management Studio
    ...
end
go

然后在C#/ EF方面:

public string CallMyStoredProcedure(string input)
{
    var outputParameter = new ObjectParameter("output", typeof(string));
    EntityContext.MyStoredProcedure(input, outputParameter);
    return (string)outputParameter.Value;
}