ServiceStack OrmLite с несколькими серверами баз данных - программирование
Подтвердить что ты не робот

ServiceStack OrmLite с несколькими серверами баз данных

Я создаю приложение вокруг рамки servicestack и должен иметь возможность доступа к данным как в Oracle, так и в MS Sql Server. Возможно ли это, используя ORMLite, кажется, что я могу установить только один диалект для приложения или я что-то пропустил?

4b9b3361

Ответ 1

Да, возможно, и поддержка этого уже встроена в OrmLiteConnectionFactory, см. пример Мастер SQLServer + Sqlite shard на домашней странице проекта OrmLite.

В основном вы должны сначала зарегистрировать свое стандартное (или основное) соединение:

var dbFactory = new OrmLiteConnectionFactory(
  "Data Source=host;Initial Catalog=RobotsMaster;Integrated Security=SSPI", 
  SqlServerDialect.Provider); 

Затем вы зарегистрируете named connection для каждого другого соединения, которое хотите поддержать, например:

dbFactory.RegisterConnection("shard-1", 
  "~/App_Data/{0}.sqlite".Fmt(shardId).MapAbsolutePath(),
    SqliteDialect.Provider);

После того, как это настроено, открытие соединения без указания имени откроет соединение с базой данных по умолчанию, например:

using (IDbConnection db = dbFactory.OpenDbConnection()) { ... } //Default DB

Пока вы можете указать имя, чтобы открыть именованное соединение с db с другим поставщиком, например:

using (var dbShard = dbFactory.OpenDbConnection("shard-1")) { ... } //Named DB

Вручную использовать разных поставщиков диалогов

Различия между реализациями SQL-провайдера между различными СУБД содержатся в каждом поставщике диалектов. Поэтому, если вы хотите использовать методы расширенного расширения OrmLite для конкретной реализации поставщика ADO.NET, вам просто нужно назначить ThreadStatic DialectProvider, который вы хотите использовать, например:

OrmLiteConfig.DialectProvider = SqlServerDialect.Provider;
var dbConn = new SqlConnection(SqlServerConnString);
dbConn.Select<Table>(); //All db access now uses the above dialect provider

Это по существу все, что RegisterConnection в OrmLiteConnectionFactory автоматически делает за кулисами для вас.

Для справки здесь все поставщики диалогов для OrmLite до этого момента:

  • SqlServerDialect.Provider
  • SqliteDialect.Provider(доступны 32/64 и моно).
  • MySqlDialect.Provider
  • PostgreSqlDialect.Provider
  • OracleDialect.Provider
  • FirebirdDialect.Provider