如何将 Dapper Extensions 映射到多个数据库?
How to map Dapper Extensions to multiple databases?
我找不到在线示例向您展示如何根据您使用的工作单元创建到多个数据库(在同一应用程序中)的映射。似乎 Dapper Extensions 将只接受一个全局 SqlDialect
.
我想使用 Dapper Extensions 根据我使用的工作单元映射到多个数据库。因此,例如对于存储库 User
和 UserLogin
的 UoW,我想将它们映射到 MySql。对于存储库 Product
和 Orders
的 UoW,我想映射到 Postgres。这两个映射应该同时在同一个应用程序中工作。
我不确定该怎么做,因为 SqlDialect
属性 似乎是一个全局设置。
class DapperExtensions
是 static
class。因此,包括 SqlDialect
在内的所有成员都是 static
。这就是为什么你提到的问题。即使是全局的,如果它是实例 class/member,您也可以简单地创建不同的实例,但由于 DapperExtensions 的设计方式,这是不可能的。
此问题已在 GitHub here 上报告。
以下可能是可能的解决方案。
If you want to use multiple implementations of DapperExtensions you can try using impl := new DapperImplementor(new SqlGeneratorImpl(config));
我无法解释更多,因为我从未使用过这种方法。
我找不到在线示例向您展示如何根据您使用的工作单元创建到多个数据库(在同一应用程序中)的映射。似乎 Dapper Extensions 将只接受一个全局 SqlDialect
.
我想使用 Dapper Extensions 根据我使用的工作单元映射到多个数据库。因此,例如对于存储库 User
和 UserLogin
的 UoW,我想将它们映射到 MySql。对于存储库 Product
和 Orders
的 UoW,我想映射到 Postgres。这两个映射应该同时在同一个应用程序中工作。
我不确定该怎么做,因为 SqlDialect
属性 似乎是一个全局设置。
class DapperExtensions
是 static
class。因此,包括 SqlDialect
在内的所有成员都是 static
。这就是为什么你提到的问题。即使是全局的,如果它是实例 class/member,您也可以简单地创建不同的实例,但由于 DapperExtensions 的设计方式,这是不可能的。
此问题已在 GitHub here 上报告。
以下可能是可能的解决方案。
If you want to use multiple implementations of DapperExtensions you can try using
impl := new DapperImplementor(new SqlGeneratorImpl(config));
我无法解释更多,因为我从未使用过这种方法。