7

Che cosa è l'equivalente didb.database.ExecuteSQLCommand equivalente in EF 7

db.Database.ExecuteSqlCommand(Sql.ToString()); 

in Entity Framework 7? .FromSQL() nella beta 4, ma non ho visto nulla di quanto sopra.

+0

** Aggiornamento ** - Attualmente, 'ExecuteSQLCommand' può essere utilizzato in Entity Framework Core. Tuttavia, è necessario aggiungere 'using Microsoft.EntityFrameworkCore;' – kimbaudi

risposta

8

La funzione non è ancora stata implementata. Monitora i suoi progressi utilizzando il numero #624. Ecco un metodo di estensione approssimativo che puoi utilizzare per ora.

public static int ExecuteSqlCommand(this RelationalDatabase database, string sql) 
{ 
    var connection = database.Connection; 
    var command = connection .DbConnection.CreateCommand(); 
    command.CommandText = sql; 

    try 
    { 
     connection.Open(); 

     return command.ExecuteNonQuery(); 
    } 
    finally 
    { 
     connection.Close(); 
    } 
} 

usare in questo modo:

db.Database.AsRelational().ExecuteSqlCommand("EXEC MySproc"); 

Nota, questo non tiene conto di eventuali transazione attiva.

+0

Creerò un'estensione su DbContext che legge il connectiontring e genera un SqlConnection separato con SqlCommand. Forse quella sarebbe la mia soluzione "temporanea" allora :) – NicoJuicy

+1

@NicoJuicy Buona idea. :) Ho aggiornato la mia risposta. – bricelam

+0

Dovresti usare "using" e lasciare il try catch ... Non saprai che qualcosa va storto qui. Accettata la tua risposta Qual è il motivo per cui estendi RelationalDatabase? Ho esteso DbContext in modo da poter usare come db.executeSql ("SQL QUERY"); (ho appena iniziato ad usare Asp.Net 5 quindi, quindi mi illumini ^^) – NicoJuicy

6

Volevo solo fornire un aggiornamento del modo più recente per utilizzare questo con Entity Framework Core RC1.

C'è un estensione per il DatabaseFacade classe nel Microsoft.Data.Entity spazio dei nomi che è possibile utilizzare come segue:

_dbContext.Database.ExecuteSqlCommand("EXEC MySproc"); 
+2

Questo è stato spostato nello spazio dei nomi 'Microsoft.EntityFrameworkCore' in RTM –