Я начал хотеть генерировать код с помощью T4. Для этого мне нужны данные из базы данных. Поскольку все данные в проекте уже получены с использованием EF, я выбираю использовать EF. Итак, в рамках моего проекта я создал класс утилиты со статическим методом, который возвращает нужный мне объект. Я узнал, что работает в контексте настраиваемого инструмента T4, который я не могу прочитать из config. Поэтому я вручную установил строку подключения моего контекста, и это сработало!Структура и конфигурация сущности. Вызов из статического контекста
private static string GetConnectionString()
{
//How to read from the web.config when running a T4 template ?
//ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings["XXXXXXX"];
//var connectionString = settings.ConnectionString;
var connectionString = @"Data Source=XXXXXX;Initial Catalog=XXXXXX;Integrated Security=SSPI;MultipleActiveResultSets=true;";
return connectionString;
}
Позже я добавил проект в свое решение. Проект A содержит класс со статическим методом, который возвращает объект. Теперь из кода в Project B Я хочу назвать этот статический метод.
При запуске этого кода я получаю сообщение об ошибке: «Поставщик службы Entity Framework не найден для поставщика ADO.NET с инвариантным именем« System.Data.SqlClient ». Убедитесь, что поставщик зарегистрирован в разделе« entityFramework » приложение конфигурационный файл. См http://go.microsoft.com/fwlink/?LinkId=260882 для получения дополнительной информации. "
Когда я устанавливаю NuGet пакет EF для проекта B, код работает, как ожидалось. Но это бьет всю цель создания полезного класса в проекте A. Вызывающая сторона должна просто получать объект независимо от его собственного контекста.
Как это исправить? Как настроить статический метод для использования EF и сделать его доступным для использования в качестве ссылки на вызывающие стороны, не зная EF?
Я думаю, что ответ, вероятно, будет чем-то вроде переопределения поведения EF для чтения из статического контекста, предоставленного в классе утилиты, вместо конфигурации, предоставленной текущей средой выполнения. Но как вы можете это сделать?
призвание (то есть тот, который на самом деле создает DbContext,) проект требует ссылки, так как конфигурация приложения читается в этом контексте. Я не знаю, поддерживается ли разделение функций конфигурации в этом отношении в EF. – DevilSuichiro