【问题标题】:How to deploy a database programmatically from an Asp.Net application using an existing database/schema as a template?如何使用现有数据库/模式作为模板以编程方式从 Asp.Net 应用程序部署数据库?
【发布时间】:2011-10-24 21:10:12
【问题描述】:

问题:

我正在创建一个 Asp.Net 应用程序,该应用程序具有多租户数据架构,每个租户都有单独的数据库。当新租户注册时,我需要能够以编程方式从应用程序创建和部署数据库。维护模板数据库/模式/脚本并使用它在服务器上部署新数据库的最佳方法是什么。

注意:

我将 .Net 4.0 用于应用程序,将 SQL Server 2008 R2 用于服务器。

当前解决方法:

目前在服务器上维护一个默认模板数据库。对数据库的更改是通过 Visual Studio 完成的,以通过源代码控制维护版本控制。需要部署新数据库时:

  1. 使用Database.Create在服务器上创建一个新数据库。

  2. 然后使用Transfer.TransferData 将架构转移到新数据库。或者,使用Transfer.ScriptTransfer 并将脚本存储在内存中以供后续部署使用。

【问题讨论】:

    标签: asp.net sql-server database .net-4.0 multi-tenant


    【解决方案1】:

    您的部署应该基于从头开始创建数据库的脚本。您所做的任何模式修改,都通过升级数据库模式的脚本进行。有关该主题的更详细讨论,请参阅 Version Control and Your Database

    进行基于差异工具的部署的替代方案使您受制于工具决定如何处理差异(对于大型表,如果工具决定进行基于副本的修改,这可能会变得非常危险),而且让您受制于 diff 工具对自动化的任何支持,这使得失败/重试处理,我应该如何表达,......“有趣”。

    【讨论】:

    • 这是一篇关于版本控制的好文章。我目前正在使用数据库项目在 Visual Studio 中执行此操作。但是,我面临的问题是以编程方式从 Asp.Net 应用程序部署数据库。在您的文章中您提到使用 VSDBCMD,但这需要应用程序完全受信任,而 Asp.Net 应用程序仅受部分信任。我也尝试过使用 SMO,但我找不到从生成的架构文件部署的方法。如果我遗漏了什么,请告诉我。谢谢
    • 我使用原始 .SQL 文件,非常成功地手写,来管理从 v.N 到 v.N+1 的升级,如文章开头所述。它需要了解如何为 每个 架构更改编写 .SQL。我什至编写了一个库来处理应用程序内 .SQL 文件(使用 GO)的执行:code.google.com/p/dbutilsqlcmd
    • 从一开始就手写所有对数据库的更改可能会有点混乱。当版本控制更重要时,我们许多人在更接近发布时实现了类似的东西。现在我们正在寻找一个更自动化的过程。我在上面引用了我们当前的解决方法。你怎么看?
    • 您当前的解决方法适用于小型数据库。一旦您的租户接近严重的数据库大小(数百 GB),将数据传输到新数据库将被证明是令人望而却步的。由于我不了解您的商业模式,因此 +100GB 的租户可能永远不会成为问题。
    猜你喜欢
    • 2022-06-13
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    相关资源
    最近更新 更多