In the web application that I'm developing using Dynamic Data, I set the DataContext at runtime,
because the application may bind different contexts, depending on many variables.

I usually test it on two different browser, and, because of the session, I need to pass the same procedure twice.
The second time, the DataContext it's already set so I don't need to register the context anymore.
That's the simple condition I use:

if (System.Web.DynamicData.MetaModel.Default == null)
    // Register context and routes
    ...
}

Exception

(the exception means: The item it's already present, Key in dictionary *** Key added ***)
[ArgumentException: L'elemento è già stato aggiunto. Chiave nel dizionario: 'MyAppDataContext'. Chiave aggiunta: 'MyAppDataContext']
   System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add) +7540648
   System.Collections.Hashtable.Add(Object key, Object value) +11
   System.Web.DynamicData.MetaModelManager.AddModel(Type contextType, MetaModel model) +159
   System.Web.DynamicData.MetaModel.RegisterContext(DataModelProvider dataModelProvider, ContextConfiguration configuration) +1560
   System.Web.DynamicData.MetaModel.RegisterContext(Func`1 contextFactory, ContextConfiguration configuration) +599
   MyApp.Pages.LoginPage.login_Click(Object sender, EventArgs e) in C:\MyApp\Login.aspx.cs:69
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1546

[InvalidOperationException: An error occurred during model registration and this operation cannot be performed.]
   System.Web.DynamicData.MetaModel.CheckForRegistrationException() +168
   System.Web.DynamicData.MetaModel.get_Default() +30
   MyApp.MasterPages.WebMasterPage.Page_Load(Object sender, EventArgs e) in C:\MyApp\Web.master.cs:47
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +50
   System.Web.UI.Control.LoadRecursive() +141
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627