2009-11-05 19 views
5

¿Hay alguna forma de ejecutar un enunciado SQL directamente desde las llamadas generadas por el marco de entidad? ¿O tendré que crear un procedimiento y luego llamarlo a través del marco de la entidad?Ejecutando sql en el marco de entidad?

Respuesta

10

Fue alrededor de google para esto mismo, el otro día, este es el ejemplo que encontré esperanza que ayuda

static void ExecuteSql(ObjectContext c, string sql) 
    { 
     var entityConnection = (System.Data.EntityClient.EntityConnection)c.Connection; 
     DbConnection conn = entityConnection.StoreConnection;  
     ConnectionState initialState = conn.State; 
     try 
     { 
      if (initialState != ConnectionState.Open) 
       conn.Open(); 
      using (DbCommand cmd = conn.CreateCommand()) 
      { 
       cmd.CommandText = sql; 
       cmd.ExecuteNonQuery(); 
      } 
     } 
     finally 
     { 
      if (initialState != ConnectionState.Open) 
       conn.Close(); 
     } 
    } 
+1

Yo aconsejaría el uso de ExecuteStoreCommand() en ObjectContext en lugar del ExecuteSql anterior() –

5

En EF 4.0 Esto es bastante fácil, porque hay nuevos métodos en el ObjectContext que le permiten ejecutar comandos de tienda (es decir, SQL) directamente:

ver esto: ExecuteStoreCommand

Si usted todavía está utilizando EF 3.5 SP1 todavía se puede ejecutar una consulta directamente contra la base de datos si realmente quiere desea:

var econn = ctx.Connection as EntityConnection; 
var dbconn = econn.StoreConnection; 

en este punto se tiene acceso a una conexión (dbconn) a la base de datos subyacente, lo que puede utilizar código ADO.NET normal a ejecutar consultas etc.

Esperanza esto ayuda

Alex

0

@Alex James, por curiosidad, ¿sería eficiente para correr un poco de texto SQL completa del código, como en no debería haber gastos generales de rendimiento ¿no? Por decir, ejecutando el mismo código sql de texto completo directamente como una consulta en el estudio de administración sql.

1

ExecuteStoreQuery<> y ExecuteStoreCommand es lo que quiere:

using (NorthWindEntities ctx = new NorthWindEntities()) 
{ 
    ctx.ExecuteStoreQuery<>() 
    ctx.ExecuteStoreCommand(); 
} 
Cuestiones relacionadas