Существует перегрузка конструктора для DataContext
, что вы можете передать строку подключения - в этом случае вы можете принять настройку из любого места.
Редактировать на основе обновленного вопроса:
Я бы очень хотел избежать изменения
все ссылки на контекст EF с
перегруженный метод, включая
Строка подключения.
Проблема в том, что контекст Entities, созданный сценарием T4, генерирует свойство const, которое используется в качестве строки подключения
public const string ConnectionString = "name=FooEntities";
public FooEntities()
: base(ConnectionString, ContainerName)
{
this.ContextOptions.LazyLoadingEnabled = true;
}
Поскольку вы не можете переопределить конструктор по умолчанию для частичного класса, единственным вариантом будет изменить сам скрипт T4 - вы должны увидеть следующее в вашем файле скрипта .TT:
public <#=code.Escape(container)#>()
: base(ConnectionString, ContainerName)
{
<#
WriteLazyLoadingEnabled(container);
#>
}
Чтобы принудительно использовать строку подключения, вы можете изменить вызов конструктора, чтобы определить строку подключения, вызвав статический метод, который вы определяете в отдельном файле (но для того же частичного класса FooEntities
):
public <#=code.Escape(container)#>()
: base(GetCustomConnectionString(), ContainerName)
{
<#
WriteLazyLoadingEnabled(container);
#>
}
Теперь GetCustomConnectionString()
можно определить отдельно
public partial class FooEntities : ObjectContext
{
public static string GetCustomConnectionString()
{
return "Foobar"; //however you want to determine connection string here
}
}
Вы видите, что это становится сложным и хрупким очень быстро, поэтому я бы не советовал делать это - но вы могли бы.