问题
I am using a layered architecture with the Entity Framework as my datalayer with a bunch of repositories on top which contain the Linq-To-Entities queries. The data layer is one project, next to that I have a Services layer and the interface, which is a website.
I want my website to be responsible of specifying the connectionstring for my entity model. How do I do this?
I am using a singleton method to get to my entity repository, which is located inside the datalayer.
Thanks
回答1:
You can copy the connection string created in the App.Config of the DAL assembly into the connectionStrings section of the web.config.
You can keep the connection string in the assembly dll but you shouldn't deploy it with the website.
You will need to copy the entire connection string. It should look like this:
<add name="DataEntities" connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=xxx;Initial Catalog=xxx;User Id=xxx;Password=xxx;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
It should include all the information on where the mapping files exist.
回答2:
In my case, although I am using L2S instead of L2E, but the recommendation should stand. I have a generalize Config library that feeds from an XML file. When a data context is required, every data object has a method like the following. Granted, it could be templated easy enough, if you prefer.
private static string _conStr = null;
private static CalendarsAndListsDataContext GetDataContext()
{
if (_conStr == null)
{
_conStr = ConfigurationLibrary.Config.Settings().GetConnectionString("liveConString");
}
return new CalendarsAndListsDataContext(_conStr);
}
Now, biggest downside is connection string changes require an application restart, but in my case, that is not an issue.
来源:https://stackoverflow.com/questions/859709/entity-framework-layered-design-where-to-put-connectionstring