1

This is my EF entities connection string, at the moment the AttachDbFile string is the full path of the database, and won't work when I deploy the site. How do I make a relative path for my AttachDbFile?

<add name="demoDBEntities" connectionString="metadata=res://*/SalongModel.csdl|res://*/SalongModel.ssdl|res://*/SalongModel.msl;provider=System.Data.SqlClient;provider connection string='data source=(LocalDB)\v11.0;attachdbfilename=&quot;C:\Users\user\Documents\Visual Studio 2013\Projects\WebApplication3\SVCloginLib\App_Data\demoDB.mdf&quot;;integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />

This is the interesting part:

attachdbfilename=&quot;C:\Users\user\Documents\Visual Studio 2013\Projects\WebApplication3\SVCloginLib\App_Data\demoDB.mdf&quot;

I've tried the most obvious ones to me:

<add name="demoDBEntities" connectionString="metadata=res://*/SalongModel.csdl|res://*/SalongModel.ssdl|res://*/SalongModel.msl;provider=System.Data.SqlClient;provider connection string='data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|demoDB.mdf;integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />

<add name="demoDBEntities" connectionString="metadata=res://*/SalongModel.csdl|res://*/SalongModel.ssdl|res://*/SalongModel.msl;provider=System.Data.SqlClient;provider connection string='data source=(LocalDB)\v11.0;attachdbfilename=&quot;.\App_Data\demoDB.mdf&quot;;integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />

<add name="demoDBEntities" connectionString="metadata=res://*/SalongModel.csdl|res://*/SalongModel.ssdl|res://*/SalongModel.msl;provider=System.Data.SqlClient;provider connection string='data source=(LocalDB)\v11.0;attachdbfilename=&quot;~\App_Data\demoDB.mdf&quot;;integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" /> 

And loads more, all give me:

The underlying provider failed on Open.

Its for a c# Rest service, if it makes any difference

1 Answer 1

1

You can use the |DataDirectory| value to specify the App_Data folder in your project. You do however need to separate the value with a slash:

<add name="demoDBEntities" connectionString="metadata=res://*/SalongModel.csdl|res://*/SalongModel.ssdl|res://*/SalongModel.msl;provider=System.Data.SqlClient;provider connection string='data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\demoDB.mdf;integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />

You may also have to set the value for DataDirectory like this in your application's initialisation method (e.g. Application_Start in global.asax.cs):

AppDomain.CurrentDomain.SetData("DataDirectory",
    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));
Sign up to request clarification or add additional context in comments.

6 Comments

Its for a c# Rest service, if it makes any difference
Add that code into your Application_Start routine.
I don't have a global.asax.cs in my project folder
You can add a global.asax file, and copy past that line of code into the correct routine. You must have copied it incorrectly to get those errors though.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.