Entity Framework DbContext Connection string in app.config/web.config not being seen

Tom picture Tom · May 27, 2012 · Viewed 10.1k times · Source

So, I have followed this instruction from ADO.NET team blog to try to make a small test project. I have double-checked everything. It doesn't seem to work and keeps saying connection string is missing.

http://blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4-1-model-amp-database-first-walkthrough.aspx

Step. 1 Build this UserModels.dll. In the dll, App.Config file, edmx generated this connection string: (hit the 'test' button when making it, and it connects successfully, and generated the edmx diagram of all the tables from 'UserDatabase')

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="UserModelsContainer" connectionString="metadata=res://*/UserModels.csdl|res://*/UserModels.ssdl|res://*/UserModels.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MyDesktop\SQL2008;initial catalog=UserDatabase;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

Step 2. Then I made a test project:

class UnitTetst1 ....
TestMethod1()....
using (var db = new UserModelsContainer()) {
  int i = db.Users.Count(); // <---expecting '0' for a new db, but I get an exception
}

---------PROBLEM HERE -----------------

Step 3. Run the test. Then I get an error InvalidOperationException like this:

"No connection string named 'UserModelsContainer' could be found in the application config file."

Seems like DbContext doesn't know where to pick up the connectionStrings from App.Config??

Please help~~

Answer

Anders Abel picture Anders Abel · May 27, 2012

When running a program, it's the app.config of the .exe file being run that is read. The app.config of the .dll is never used. Since UserModel.dll is a dll, there must be an .exe (or web site) somewhere that you run. Place the connection string in that exe's app.config (or if it is a web site in the web.config).