Как я могу использовать дополнительный DBContext? - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть проект ABP 1.0.0, который подключается к SQL Server.Сейчас я пытаюсь расширить это приложение, чтобы получить дополнительные данные из Teradata.Я создал новый проект EF и сослался на Teradata.Client.Provider вместо EntityFramework.SqlServer.

. В новом проекте у меня есть новый класс TdContext, в котором есть оба желаемых объекта DbSet Teradata, построитель модели, который отображаетсущности к схеме / таблице и обычные открытые конструкторы, где я указываю строку подключения.Я не уверен, что providerName, поэтому я угадал "Teradata.Client.Provider".

Когда я вызываю службу приложений, которая пытается внедрить IRepository<ATerraDataTable>, ABP выдает универсальный вариант: Произошла ошибка.

Я не уверен, что терпит неудачу.Кроме имя провайдера, я не могу найти нигде в ABP, где я говорю, чтобы создать экземпляр клиента Teradata.Кроме того, я не могу вспомнить, как IRepository<TEntity> знает, какой DbContext использовать.

Мой введенный IRepository<ASqlDataTable> работает нормально.Когда я писал это решение 3 года назад, у меня был только один DBContext для SQL Server, я не особо задумывался над тем, как Repository узнает, какое соединение использовать.Документы ABP предполагают, что UOW делает это, но они не дают достаточно подробностей для меня.

1 Ответ

0 голосов
/ 02 октября 2018

Abp 1.0.0 старый, поэтому я не уверен, что мой ответ будет правильным.Но здесь все идет.

Abp использует систему модулей.

Если вы посмотрите на ваше приложение переднего плана (если mvc), вы найдете этот класс.appnameWebMvcModule.cs в папке запуска.

В этом классе вы найдете следующую строку [DependsOn (typeof (xxxx))], где xxx - другой проект.Вы можете следовать по этой цепочке, пока не достигнете appnameEntityFrameworkModule.cs, который имеет следующую строку.

Configuration.Modules.AbpEfCore (). AddDbContext ....


Если ваш второй dbcontext имеет значениессылаясь на другую базу данных с совершенно другой структурой, я бы создал отдельное приложение и реализовал API.Затем пусть ваше текущее приложение реализует этот API.таким образом, вы не сломаете ни одно приложение, и у вас будет более простая расширяемость.

...