MVC4 Scaffolding Add Controller gives error "Unable to retrieve metadata..."

By trial and error I found the line of code (it's the DbContext ctor) that is causing the error:

public class MyThingDb : DbContext
{
    // If I comment this constructor out the scaffolding works
    public MyThingDb()
        : base("DefaultConnection")
    {
    }

    public DbSet<MyThing> Things{ get; set; }
}

WTF?


I also stumbled into this symptom while running a tutorial on the subject of building an MVC Music Store application.

There definitely seem to be a bug within Visual Studio. What seems to trigger this bug is choosing some name, other than the default, used for the connection string.

My thanks goes to user dwaynef on http://forums.asp.net/t/1838396.aspx/1 for finding this workaround.

A bit elaborated you need to, temporarily during addition of the new scaffolding controller, change the name of your connection string to 'DefaultConnection' in web.config:

<connectionStrings>
     <add name="DefaultConnection" ... />
</connectionStrings>

If you have more than one connection string - make sure only this one is there while performing the action.


Here's my two cents worth. I don't believe your solution actually addresses the real issue. The real fix is to pass the base constructor the database name rather than the connection string name so if your connection string is

<add name="MyContext" connectionString="Data Source=|DataDirectory|MyDatabase.sdf" providerName="System.Data.SqlServerCe.4.0" />

you're context class should be defined as

    public class MyContext : DbContext 
{
    public MyContext() : base("MyDatabase") { }... 

Hope this works for you and others as it does for me.