La risposta di Craig, anche se non ha funzionato così com'è, mi ha fatto guardare nella giusta direzione. Si scopre che c'è una proprietà EntityConnection.StoreConnection che ti fornisce una connessione al DBMS sottostante. Quindi eseguire SQL "nativo" è facile come questo:
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
}
}