2016-07-15 7 views
0

Ich rufe gespeicherte Prozedur auf folgende Weise auf. Aber wenn ich es in sqlProfiler anschaue, wurde vom Entity-Framework kein Aufruf ausgeführt, um die gespeicherte Prozedur auszuführen.Prozedur wird im Entitätsframework mit DbRawSqlQry nicht aufgerufen

objUnit.dbContext.Database.SqlQuery<ResellerCustomerFile>("USP_ResellerCustomerFile_DeleteFiles @CustomerId, @FileId, @IsFile", 
       new SqlParameter("@CustomerId", customerId), 
       new SqlParameter("@FileId", fileId), 
       new SqlParameter("@IsFile", 1)); 

Wenn ich den Code ändern .ToList durch Zugabe von(), .FirstOrDefault() usw. am Ende der obigen Aussage dann in SQLProfiler aufgezeichnet nennen, aber es füllt Datareader und beginnt das Abbilden die Datensätze aus Daten Leser, wie ich TEntity übergeben habe.

Aber meine gespeicherte Prozedur aktualisiert nur Datensätze und gibt nichts zurück. Wie kann ich meine gespeicherte Prozedur aufrufen?

Antwort

1

Verwenden Sie objUnit.dbContext.Database.ExecuteSqlCommand anstelle von objUnit.dbContext.Database.SqlQuery<ResellerCustomerFile>.

SqlQuery erwartet einen Rückgabewert, deshalb musste ResellerCustomerFile als generischer Rückgabetyp deklariert werden.

ExecuteSqlCommand ist ein Befehl ohne Rückgabewert, verwenden Sie diese Methode, um Ihren Befehl direkt auszuführen.

objUnit.dbContext.Database.ExecuteSqlCommand("USP_ResellerCustomerFile_DeleteFiles @CustomerId, @FileId, @IsFile", 
    new SqlParameter("@CustomerId", customerId), 
    new SqlParameter("@FileId", fileId), 
    new SqlParameter("@IsFile", 1)); 
Verwandte Themen