Мы находимся в смешанной среде, где наше приложение использует как ADO.NET, так и Entity Framework.
Поскольку оба указывают на один и тот же физический SQL-сервер, мы хотели бы удалить строку подключения Entity Framework из файла конфигурации и затем автоматически построить строку на основе текущих строк соединения ADO.NET.
Это избавит нас от ошибок, когда разработчик изменил строку ADO.NET, но забыл изменить строку подключения Entity Framework.
Я прочитал это, но они не ответили на вопрос.
Как создать строку соединения программно в MS SQL в Entity Framework 6?
Если я создаю свой собственный DbConnection и передаю его в DbContext (existingConnection, contextOwnsConnection), тогда он выдает ошибку "Контекст используется в режиме Code First с кодом, который был сгенерирован из файла EDMX для базы данных First или Model Первая разработка".
Я не использую Code First.
https://msdn.microsoft.com/en-us/data/jj680699
Это говорило о конфигурации базы кода в EF 6, но в статье не отображается код, который фактически изменил строку соединения.
ОБНОВЛЕНО: дополнительная информация, чтобы помочь уточнить мой вопрос.
Я НЕ использую первый код и хотел бы построить строку подключения за пределами файла конфигурации.
DbContext, который я использую, является частичным классом для автоматически созданного файла DbContext, который генерирует шаблон T4.
У меня создалось впечатление, что мне нужно создать унаследованный класс DbConfiguration и сделать что-то в этом классе, но единственным примером, который я нахожу, является использование Azure.
https://msdn.microsoft.com/en-us/data/jj680699
Существует статья о Code Project, в которой говорится о настройке строки соединения во время выполнения, но статья основана на построении строки подключения каждый раз, когда я создаю новый контейнер Entity.
http://www.codeproject.com/Tips/234677/Set-the-connection-string-for-Entity-Framework-at
Я хотел бы иметь возможность использовать мой частичный класс DbContext для создания строки подключения, чтобы вызывающий абонент не должен был делать что-либо особенное.
ОБНОВЛЕНО: Рабочий код для RunTime, но не DesignTime
Используя код, отправленный @Circular Reference, перечисленный ниже, я смог изменить строку соединения, не меняя вызовы на мой класс Entity, но это не работает для файла DesignTime EDMX.
public partial class TestEntities : DbContext
{
public TestEntities() : base(GetSqlConnection(), true)
{
}
public static DbConnection GetSqlConnection()
{
// Initialize the EntityConnectionStringBuilder.
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
var connectionSettings = ConfigurationManager.ConnectionStrings("Current_ADO_Connection_In_Config");
// Set the provider name.
entityBuilder.Provider = connectionSettings.ProviderName;
// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = connectionSettings.ConnectionString;
// Set the Metadata location.
entityBuilder.Metadata = "res://*/Models.TestModel.csdl|res://*/Models.TestModel.ssdl|res://*/Models.TestModel.msl";
return new EntityConnection(entityBuilder.ToString());
}
}
Теперь, если я могу просто запустить DesignTime, тогда это будет хорошо.