How to set up LocalDb for unit tests in Visual Studio 2012 and Entity Framework 5

Klas Mellbourn picture Klas Mellbourn · Sep 3, 2012 · Viewed 18.5k times · Source

We have a Visual Studio 2012 ASP.NET MVC project using Entity Framework 5.

There are some unit tests that depend on a database. Setting up the app.config file in the test project to use a central SQL Server database works fine.

However, it would be much nicer to use a LocalDb, so that each developer has his/her own database when running the tests. Especially since we would like to have the tests set up to DropCreateDatabaseAlways when running.

However, I can't get the setup to work. If I try this in app.config:

<add name="TestDb" 
   connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=unittestdb;
     Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\unittestdb.mdf"
   providerName="System.Data.SqlClient" />

I get:

System.Data.SqlClient.SqlException: A file activation error occurred. The physical file name '\unittestdb.mdf' may be incorrect. Diagnose and correct additional errors, and retry the operation. CREATE DATABASE failed. Some file names listed could not be created. Check related errors.

It sounds like it wants the mdf file to exist already, which seems strange since it is trying to create the database. Creating a mdf file manually does not change the error message.

Answer

zbw911 picture zbw911 · Feb 4, 2013

Try:

AppDomain.CurrentDomain.SetData(
  "DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ""));

This will Create Db File on /bin/Debug/yourdbname.mdf