Я пишу многоразовый класс базового репозитория, где разработчик будет проходить в общем представлении ObjectContext
, а базовый репозиторий создаст экземпляр его с помощью Activator.CreateInstance
. При отладке я хочу использовать пакет nuget CommunityEFProviderWrappers.EFTracingProvider
. Поэтому мой код для настройки контекста объекта выглядит следующим образом:
public void RenewDataContext()
{
#if DEBUG
// get the default container name
var containerName = Activator.CreateInstance<T>().DefaultContainerName;
// create an instance of the object context using EF Trace
Context = (T)Activator.CreateInstance(typeof(T), EFTracingProviderUtils.CreateTracedEntityConnection(containerName));
Context.EnableTracing();
#else
Context = Activator.CreateInstance<T>();
#endif
}
Проблема заключается в том, что это всегда вызывает следующую ошибку при попытке создать экземпляр ObjectContext
с помощью EFTracingProvider
: "Указанная схема неверна. Ошибки:\r\n (0,0): ошибка 0175: указанный поставщик магазина не может быть найден в конфигурации или недействителен."
Если я заменил имя контейнера именем строки подключения в веб-конфигурации и не сделаю первый Activator.CreateInstance<T>()
, тогда он отлично работает. Поэтому проблема связана с тем, что я создаю первый экземпляр, а затем второй.
Вот что я пробовал:
- удалить и исключить первый экземпляр.
- закрыть соединение в первом экземпляре.
- помещает первый экземпляр в оператор using.
- явно определить сборку, содержащую ObjectContext в строка подключения в файле web.config в проекте запуска (Исключение Metadata при использовании Entity Framework Entity Connection)
Я пытаюсь избежать пропуска разработчика в родовом типе ObjectContext
И имени строки подключения. Это кажется излишним.
Итак, мой вопрос: Как получить имя соединения из общего представления, представляющего контекст объекта, и по-прежнему использовать его для создания экземпляра контекста объекта с помощью EntityConnection, сгенерированного EF Trace?
Мой вопрос в том, почему этот метод не работает, а не о возможной работе вокруг.