S2Dao.NETで普通に複数DBに接続できた

できましたよっと。

やりたかったこと

一部のテーブルだけ他のデータベースサーバーに置いてあるので、それらのDAOは他のDAOで使っているのとは別のコネクションを張って使いたい。

設定

  • app.dicon

    • module.dicon

      • s2dao.dicon

        • ado.dicon
      • exceptional-entities.dicon

        • other-db-s2dao.dicon

          • other-db-ado.dicon

diconのinclude関係をこんな感じにして、例外的に他のデータベースを使うDAO interface(仮にIHogeDaoとしよう)はexceptional-entities.diconに収めた。で、第二のコネクションに関する設定はexceptional-entities.dicon以下にぶら下がってるother-db-s2dao.dicon, other-db-ado.diconに入れた。これはs2dao.dicon, ado.diconとはコネクションの設定だけが違う。

最初はこんな風にしていて、はまった。

  • app.dicon

    • module.dicon

      • s2dao.dicon

        • ado.dicon
      • other-db-s2dao.dicon

        • other-db-ado.dicon

IHogeDaoをmodule.diconに入れてしまったのだ。s2dao.diconで定義したinterceptorとother-db-s2dao.diconで定義したのとは名前空間が違うから、other-db-s2dao.diconで定義したinterceptorをaspectに指定すればOKかと思ったのだけれども。でも走らせて見たら、なんかother-db-s2dao.diconで定義したinterceptorでクエリを走らせたところで固まって、結局timeoutしてしまった。トランザクション関係が怪しい?

もう一段dicon includeをかませてみたら、うまくいった。

参考