2011-12-12 46 views
1

對於我正在處理的項目,我無法使用[dbo]模式。從查看EventStore源看,使用非dbo模式看起來並不重要。EventStore 3.1 - SQL持久性 - 如何使用非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(...) 

有沒有更好的方法來處理我錯過的?

回答

3

雖然我可以看到自定義表名的潛在需求,但現有版本不支持該功能。所有你需要做的是繼承MsSqlDialect,然後提供您的自定義版本的wireup像這樣:

UsingSqlPersistence(...) 
    .WithDialect(new MsSqlDialectWithCustomTableNames()); 
1

,不需要改動任何代碼,而且有利於安全性的解決方案:

  1. 在數據庫中創建一個新用戶,並授予他對新模式的只讀訪問權限。
  2. 將新模式設置爲默認模式給用戶。
  3. 向配置文件添加一個新的'EventStore'連接字符串。
  4. 將此新連接傳遞給UsingSqlPersistence構造函數。

所有在事件存儲的查詢是不前綴與架構名稱,所以改有效用戶默認模式「重定向」一切以新的模式的調用。

更重要的是,擁有限定權限的活動存儲的特定用戶無論如何都是件好事。確保其他數據庫用戶無法訪問新的模式。