sql >> Base de Datos >  >> RDS >> PostgreSQL

Entity Framework ObjectContext -> llamadas SQL sin procesar a DBMS nativo

La respuesta de Craig, aunque no funcionó tal cual, me hizo mirar en la dirección correcta. Resulta que hay una propiedad EntityConnection.StoreConnection que le proporciona una conexión con el DBMS subyacente. Así que ejecutar SQL "nativo" es tan fácil como esto:

    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();  // open connection if not already open
            using (DbCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
            }
        }
        finally
        {
            if (initialState != ConnectionState.Open)
                conn.Close(); // only close connection if not initially open
        }
    }