如何使用其他DBContext?

时间:2018-09-28 22:32:55

标签: aspnetboilerplate

我有一个现有的ABP 1.0.0项目连接到SQL Server。现在,我正在尝试扩展此应用程序,以从Teradata获取更多数据。我创建了一个新的EF项目,并引用了Teradata.Client.Provider而不是EntityFramework.SqlServer

在新项目中,我有一个新的TdContext类,它同时具有所需的DbSet Teradata实体,将实体映射到架构/表的模型构建器以及在其中指定连接字符串的常规公共构造器。我不确定providerName,所以我猜到了“ Teradata.Client.Provider”。

当我调用尝试注入IRepository<ATerraDataTable>的App Service时,ABP会抛出通用错误。

我不确定发生了什么。除了providerName之外,我在ABP的任何地方都找不到要实例化Teradata客户端的地方。此外,我不记得IRepository<TEntity>如何知道要使用哪个DbContext。

我注入的IRepository<ASqlDataTable>工作正常。 3年前,当我编写此解决方案时,我只有一个DBContext到SQL Server,所以我并没有考虑太多问题,以询问存储库如何知道要使用的连接。 ABP文档推断UOW可以做到这一点,但对我而言他们没有提供足够的细节。

.NET提供程序以供Teradata参考: https://downloads.teradata.com/doc/connectivity/tdnetdp/14.11/webhelp/DevelopingNetDataProviderforTeradataApplications.html

1 个答案:

答案 0 :(得分:1)

Abp 1.0.0 is old so i am not sure if my answer will be correct. But here goes.

Abp uses a module system.

if you look at your front end application(if mvc) you will find this class. appnameWebMvcModule.cs in the folder startup.

In that class you will find the following line [DependsOn(typeof(xxxx))] where xxx is a other project. You can follow that chain until you reach appnameEntityFrameworkModule.cs Wich has the following line.

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


If your second dbcontext is referencing a other database with a complete other structure, i would create a seperate application and implement a api. Then have your current application implement that api. this way you don't break any application and have and easier extensiblity.