La réponse de Craig, même si elle ne fonctionnait pas telle quelle, m'a fait regarder dans la bonne direction. Il s'avère qu'il existe une propriété EntityConnection.StoreConnection qui vous permet d'établir une connexion au SGBD sous-jacent. Exécuter du SQL "natif" est donc aussi simple que cela :
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
}
}