EventStore 3.1 - Постоянство SQL - Как я могу использовать схему не-dbo? - PullRequest
1 голос
/ 13 декабря 2011

Для проекта, над которым я работаю, я не могу использовать схему [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(...)

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

Ответы [ 2 ]

3 голосов
/ 14 декабря 2011

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

UsingSqlPersistence(...)
    .WithDialect(new MsSqlDialectWithCustomTableNames());
1 голос
/ 14 ноября 2012

Решение, не требующее каких-либо изменений кода и обеспечивающее безопасность:

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

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

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

...