【问题标题】:Subsonic 3.0 LINQ Templates with Multiple Databases具有多个数据库的 Subsonic 3.0 LINQ 模板
【发布时间】:2013-04-30 00:02:22
【问题描述】:

我正在评估在我们的业务中使用 SubSonic 3.0 来替代我们的 POCO 对象。我是 SubSonic 的新手,昨天真的安装了它。我已经到了可以使用 3.0 LINQ T4 模板连接到一个数据库的地步,并且被能够使用 SubSonic 在一个应用程序中连接到多个数据库的承诺所吸引。

我的问题是我找不到任何关于如何将 T4 模板与多个数据库一起使用的文档(例如,添加另一个连接字符串、设置 Settings.ttinclude 等)。

我已经在 Google 和 Stackoverflow 中搜索了答案,以了解如何做到这一点,或者是否有可能。任何帮助将不胜感激。


所以我似乎能够通过向 web.config 添加另一个 connectionString 来使其工作,然后为该 connectionString 添加第二组模板,它可以工作,但它看起来并不“干净”,甚至不是真的对我来说很干燥。

通过添加多个 .dbml 文件,我似乎也可以使用 .NET Built in LINQ 做几乎相同的事情。

在这一点上,谁能给我一些理由,为什么我们不应该只使用内置的 LINQ 支持而不是像 SubSonic 这样的 3rd 方 ORM?

【问题讨论】:

    标签: subsonic t4 multiple-databases


    【解决方案1】:

    来自亚音速邮件列表的交叉发帖:

    哦,是的,我一直这样做,诀窍是模板的两个副本(简单)或编辑模板以迭代两组表(更难)。在第二个 settings.tt 中更改连接字符串的名称以反映其他数据库。您可能还想更改命名空间,以免在表名相同的情况下发生冲突。这看起来很老套,但我不认为这是因为它允许您独立更改每个数据库的模板。

    如果您真的只想要一组模板,最简单的方法是编辑 SQLServer.tt(或您选择的数据库)并覆盖 LoadTables 的工作方式,以便它接受连接列表而不是单个一。我不得不说这很痛苦,而且比拥有 2 个文件副本要困难得多。

    【讨论】:

    • 您好,我对此很陌生,我不明白您想说什么“settings.tt 更改连接字符串的名称以反映其他数据库”如何我可以这样做吗?我已经在不同的文件夹中创建了 2 组 t4 模板并对其进行了配置,但我仍然无法使用它,它无法识别我在第一个加载的数据库中获得的所有存储过程。事实上,它可以识别我拥有的存储过程,但不能识别它的参数。谢谢
    • 很好的解决方案,为每个数据库使用一组单独的模板。这对我帮助很大,谢谢。我遇到的唯一问题是两个数据库中具有相同名称的表。我通过覆盖 settings.ttinclude 文件中 CleanUp() 方法中的名称(就在排除表数组下方)解决了这个问题。
    【解决方案2】:

    (回复您对问题的回答)

    在这一点上,谁能给我一些推理,为什么我不应该只使用内置的 LINQ 而不是像 SubSonic 这样的 3rd 方 ORM?

    立即想到:SubSonic 支持的不仅仅是 Microsoft Sql Server。

    【讨论】:

    • 由于我们是一家 Microsoft 商店,我们 100% 的数据库交互都是通过 Microsoft SQL Server 进行的。我很欣赏 SubSonic 支持多个 RDBMS,将​​来可能会出现我们需要这种支持的情况,但目前这不是问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多