Как сопоставить расширения Dapper с несколькими базами данных?

#c# #dapper-extensions

#c# #dapper-extensions

Вопрос:

Я не смог найти пример в Интернете, где они показали вам, как создавать сопоставления с несколькими базами данных (в одном приложении) на основе того, какую единицу работы вы используете. Похоже, что расширения Dapper будут принимать только один глобальный SqlDialect .

Я хочу использовать расширения Dapper для сопоставления с несколькими базами данных в зависимости от того, какую единицу работы я использую. Так, например, для UoW для репозиториев User и UserLogin , я хочу сопоставить их с MySQL. Для UoW для репозиториев Product и Orders , я хочу сопоставить с Postgres. Оба эти сопоставления должны работать в одном приложении одновременно.

Я не уверен, как это сделать, поскольку SqlDialect свойство, похоже, является глобальным параметром.

Ответ №1:

Класс DapperExtensions — это static класс. Следовательно, все члены, включая SqlDialect static . Вот почему проблема, о которой вы упомянули в вопросе. Несмотря на то, что это глобальный класс / член экземпляра, вы могли бы просто создать другой экземпляр, но это невозможно из-за способа разработки DapperExtensions.

Об этой проблеме сообщается на GitHub здесь .

Возможным решением может быть следующее.

Если вы хотите использовать несколько реализаций DapperExtensions, вы можете попробовать использовать impl := new DapperImplementor(new SqlGeneratorImpl(config));

Я не могу объяснить больше, потому что я никогда не использовал этот подход.