Хотя конструктор без параметров, который автоматически находит соединение, кажется хорошей идеей, он тесно связывает контекст объекта с файлом конфигурации.
Он также вводит некоторую «магию» в том, что у потребителя нет четкого способа определить, как изменить строку соединения, связанную с конструктором без параметров (кроме чтения источника).
Полагаю, мой ответ таков: независимо от того, позволяет ли Entity Framework вам это делать, вы, вероятно, не должны этого делать. Вместо этого используйте фабрику и достигните той же гибкости, не привязывая контекст объекта к системе конфигурации:
public interface ICustomDataContextFactory
{
CustomDataContext Create();
}
public class CustomDataContextFactory : ICustomDataContextFactory
{
private readonly string _connectionStringName;
public CustomDataContextFactory(string connectionStringName)
{
_connectionStringName = connectionStringName;
}
public CustomDataContext Create()
{
var connectionString = ConfigurationManager.ConnectionStrings[_connectionStringName].ConnectionString;
return new CustomDataContext(connectionString);
}
}
Это предоставляет всем потребителям один и тот же механизм для создания экземпляра без параметров, в то же время позволяя разработчикам решать как создать экземпляр - возможно, необходимо использовать другую строку подключения для конкретного экземпляра или базы данных имя читается из командной строки при запуске.
Я понимаю, что вы сказали, что не хотите вводить новый класс, через который проходит строка подключения. Я понял это как класс, производный от CustomDataContext
, а не от фабрики, что является новой концепцией здесь.
(Этот ответ действительно относится только к производственному коду. Уловка конструктора без параметров полезна в эфемерном коде, например, для проверки концепции.)