Assume first that DbContext and model / database.
- Leave the generated EF connection strings in the app.config file intact. As Arthur said, they contain paths to EF metadata (csdl / ssdl / msl). They are also used during development by a fashion designer.
- , , "SharedConnection". , .
- , DbContext .
- EF- . , :
public class BaseContext : DbContext
{
public BaseContext(string nameOrConnectionString)
: base(CreateConnection(nameOrConnectionString), true)
{
}
private static EntityConnection CreateConnection(string connectionString)
{
DbConnection dbConn = Database.DefaultConnectionFactory.CreateConnection(
ConfigurationManager.ConnectionStrings["SharedConnection"].ConnectionString);
EntityConnection wsBuilder = new EntityConnection(connectionString);
return new EntityConnection(wsBuilder.GetMetadataWorkspace(), dbConn);
}
}
, , BaseContext. CreateConnection. .
private static EntityConnection CreateConnection(string connectionString)
{
const string appSettingKey = "SharedConnectionStringName";
string sharedConnectionStringName = ConfigurationManager.AppSettings[appSettingKey];
if (string.IsNullOrEmpty(sharedConnectionStringName))
{
throw new Exception(string.Format(
"Shared connection not configured. " +
"Please add a setting called \"{0}\" to the \"appSettings\" " +
"section of the configuration file.", appSettingKey));
}
ConnectionStringSettings backendSettings =
ConfigurationManager.ConnectionStrings[sharedConnectionStringName];
if (backendSettings == null)
{
throw new Exception(string.Format(
"Invalid connection string name \"{0}\" in appSetting \"{1}\"",
sharedConnectionStringName, appSettingKey));
}
System.Data.Common.DbConnection dbConn =
Database.DefaultConnectionFactory.CreateConnection(
backendSettings.ConnectionString);
EntityConnection wsBuilder = new EntityConnection(connectionString);
return new EntityConnection(wsBuilder.GetMetadataWorkspace(), dbConn);
}