К сожалению, объединение нескольких контекстов сущностей в одно именованное соединение невозможно.Если вы хотите использовать именованные строки подключения из файла .config для определения подключений Entity Framework, у каждого из них должно быть свое имя.По соглашению это имя обычно является именем контекста:
<add name="ModEntity" connectionString="metadata=res://*/ModEntity.csdl|res://*/ModEntity.ssdl|res://*/ModEntity.msl;provider=System.Data.SqlClient;provider connection string="Data Source=SomeServer;Initial Catalog=SomeCatalog;Persist Security Info=True;User ID=Entity;Password=SomePassword;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
<add name="Entity" connectionString="metadata=res://*/Entity.csdl|res://*/Entity.ssdl|res://*/Entity.msl;provider=System.Data.SqlClient;provider connection string="Data Source=SOMESERVER;Initial Catalog=SOMECATALOG;Persist Security Info=True;User ID=Entity;Password=Entity;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
Однако, если вы столкнетесь с конфликтами пространства имен, вы можете использовать любое имя и просто передать правильное имя в контекст, когда оногенерируется:
var context = new Entity("EntityV2");
Очевидно, что эта стратегия работает лучше всего, если вы используете фабрику или внедрение зависимостей для создания своих контекстов.
Другой вариант - создание всей строки подключения каждого контекста.программно, а затем передать всю строку в конструктор (а не только имя).
// Get "Data Source=SomeServer..."
var innerConnectionString = GetInnerConnectionStringFromMachinConfig();
// Build the Entity Framework connection string.
var connectionString = CreateEntityConnectionString("Entity", innerConnectionString);
var context = new EntityContext(connectionString);
Как примерно так:
Type contextType = typeof(test_Entities);
string innerConnectionString = ConfigurationManager.ConnectionStrings["Inner"].ConnectionString;
string entConnection =
string.Format(
"metadata=res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl;provider=System.Data.SqlClient;provider connection string=\"{1}\"",
contextType.Name,
innerConnectionString);
object objContext = Activator.CreateInstance(contextType, entConnection);
return objContext as test_Entities;
... со следующим вyour machine.config:
<add name="Inner" connectionString="Data Source=SomeServer;Initial Catalog=SomeCatalog;Persist Security Info=True;User ID=Entity;Password=SomePassword;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
Таким образом, вы можете использовать одну строку подключения для каждого контекста в каждом проекте на машине.