如何使用额外的 DBContext?

How Do I Use an Additional DBContext?

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

在新项目中,我有一个新的 TdContext class,它具有两个所需的 DbSet Teradata 实体,一个将实体映射到 schema/table 的模型构建器和通常的 public 构造函数,我在其中指定连接字符串。我不确定 providerName 所以我猜 "Teradata.Client.Provider".

当我调用试图注入 IRepository<ATerraDataTable> 的应用服务时,ABP 抛出通用错误发生。

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

我注入的 IRepository<ASqlDataTable> 工作正常。当我 3 年前写这个解决方案时,我只有一个 DBContext 到 SQL 服务器,我没有想太多去问一个存储库如何知道要使用什么连接。 ABP 文档推断 UOW 会这样做,但他们没有为我提供足够的细节。

.NET Provider for Teradata 参考: https://downloads.teradata.com/doc/connectivity/tdnetdp/14.11/webhelp/DevelopingNetDataProviderforTeradataApplications.html

A​​bp 1.0.0 太旧了,所以我不确定我的回答是否正确。但是这里是。

A​​bp 使用模块系统。

如果您查看您的前端应用程序(如果是 mvc),您会发现这个 class。 appnameWebMvcModule.cs 在文件夹 startup.

在那 class 中,您会发现以下行 [DependsOn(typeof(xxxx))] 其中 xxx 是另一个项目。 您可以沿着这条链直到到达 appnameEntityFrameworkModule.cs 其中有以下行。

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


如果您的第二个 dbcontext 正在引用具有完整其他结构的其他数据库,我将创建一个单独的应用程序并实施 api。 然后让您当前的应用程序实现 api。 这样你就不会破坏任何应用程序并且具有更容易的可扩展性。