EventStore 3.1 — SQL Persistence — как использовать схему, отличную от dbo?

Для проекта, над которым я работаю, я не могу использовать схему [dbo]. Глядя на исходный код EventStore, использование схемы, отличной от dbo, не кажется тривиальным.

До сих пор лучшее, что я придумал, это использовать собственный диалект, подобный этому:

  • Подкласс CommonSqlDialect
  • Добавить частный экземпляр MsSqlDialect
  • Затем переопределите все виртуальные свойства CommonSqlDialect, чтобы сделать что-то вроде

Пример:

public override string AppendSnapshotToCommit
{
    get { return customizeSchema(_msSqlDialect.AppendSnapshotToCommit); }
}
private string customizeSchema(string dboStatement)
{
    // replace "[dbo]" with "[notdbo]", 
    // replace " Commits" with " [notdbo].Commits", 
    // replace " Snapshots" with " [notdbo].Snapshots"
}

Мне также нужно настроить свойство InitializeStorage, чтобы заменить «sysobjects» на «sys.objects», чтобы я мог добавить дополнительное ограничение на имя схемы.

Это работает, но кажется, что должны быть параметры подключения для настройки имен схем и таблиц.

UsingSqlPersistence(...)
    .WithSchema(...)
    .WithCommitsTable(...)
    .WithSnapshotsTable(...)

Есть ли явно лучший способ справиться с этим, который я пропустил?


person George    schedule 12.12.2011    source источник


Ответы (2)


Хотя я вижу потенциальную потребность в настройке имен таблиц, существующая версия этого не поддерживает. Все, что вам нужно сделать, это создать подкласс MsSqlDialect, а затем предоставить свою собственную версию проводнику следующим образом:

UsingSqlPersistence(...)
    .WithDialect(new MsSqlDialectWithCustomTableNames());
person Jonathan Oliver    schedule 14.12.2011

Решение, которое не требует никаких изменений кода и хорошо для безопасности:

  1. Создайте нового пользователя в базе данных и предоставьте ему доступ только для чтения/записи к новой схеме.
  2. Установите новую схему в качестве схемы по умолчанию для пользователя.
  3. Добавьте новую строку подключения EventStore в файл конфигурации.
  4. Передайте это новое соединение конструктору UsingSqlPersistence.

Все запросы в хранилище событий не имеют префикс имени схемы, поэтому изменение схемы по умолчанию для пользователя эффективно "перенаправляет" все вызовы на новую схему.

Более того, иметь конкретного пользователя для хранилища событий с ограниченными разрешениями — это в любом случае хорошо. Убедитесь, что другие пользователи базы данных не имеют доступа к вашей новой схеме.

person Jakub Konecki    schedule 14.11.2012