This also seems to work for self-service:
public static class OverrideCatalogs
{
public static void OverrideCatalog(string initialCatalogName, string overrideName)
{
var overrides = GetOverwritesDictionary();
if (!overrides.ContainsKey(initialCatalogName))
{
overrides.Add(initialCatalogName, overrideName);
}
else
{
overrides[initialCatalogName] = overrideName;
}
}
public static Type GetDynamicQueryEngineType()
{
DynamicQueryEngine obj = new DynamicQueryEngine();
return obj.GetType();
}
public static Dictionary<string, string> GetOverwritesDictionary()
{
var obj = GetDynamicQueryEngineType().InvokeMember("_catalogOverwrites", BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Static, null, null, null);
return obj as Dictionary<string, string>;
}
public static void ClearOverrides()
{
GetOverwritesDictionary().Clear();
}
}
Although it's certainly naughty.