2012-05-01 12 views
5

Ich schrieb gespeicherte Prozedur Hexe manchmal RAISERROR(). ich es durch das Entity Framework ausführen wie:Datenbank Fehlerbehandlung in Entity Framework

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

Stored Procedure:

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

Gibt es eine Möglichkeit, Informationen über Fehler zu bekommen?

Antwort

2

Kann dies einfach in einen Versuch/Fang mit Ausnahme angezeigt werden? Oder vielleicht könnten Sie versuchen, in den Debug-Modus zu gehen?

+0

BTW. Ich war zu schnell ... RAISERROR gibt keine Ausnahme zurück. Nur SQL Server-Errorrs ... Wie kann ich also meine benutzerdefinierten Fehler behandeln? – nosbor

+1

Fangen Sie eine Instanz von SqlException in Ihrem Try/Catch-Block und verwenden seine Messages oder Errors-Eigenschaften ?: (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception.aspx) –

0

Hier ist, wie ich damit umgehen:

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 

Dann auf der C#/EF Seite:

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

in SQL Server Ausnahme Level 1 bis 10 sind Informationszwecken und erheben keinen Fehler zurück zu Ihre Bewerbung.

ändern Pegel zwischen 11 und 16, um den Fehler vom SP zu erhöhen.

Verwandte Themen