带有多个sqlprovider安装脚本的DNN模块

时间:2013-10-14 16:43:32

标签: dotnetnuke-module dotnetnuke-7

上下文

  • 我有一个使用多个表的DNN 7模块。

  • 为了清晰和易用,我将CREATE TABLE语句放在单独的文件中。

  • 我的模块的.dnn文件在每个脚本下有多个条目 组件标签。

问题

当我安装模块时,只执行最后一个安装脚本(在示例“CreateProductWidths”的情况下),忽略其他脚本。

问题

如何在安装期间在单独的文件中运行多个脚本?我在这个模块中总共有15个表,因此将它们的所有定义都放在一个脚本中是不合适的。如果它太难了,我可能会做错了,我愿意接受建议。感谢。

示例

<component type="Script">
    <scripts>
        <basePath>DesktopModules\ProductManager</basePath>
        <script type="Install">
          <path>Providers\DataProviders\SqlDataProvider</path>
          <name>CreateProductCategories.SqlDataProvider</name>
          <version>00.00.01</version>
        </script>
        <script type="Install">
          <path>Providers\DataProviders\SqlDataProvider</path>
          <name>CreateProductFamilies.SqlDataProvider</name>
          <version>00.00.01</version>
        </script>
        <script type="Install">
          <path>Providers\DataProviders\SqlDataProvider</path>
          <name>CreateProductWidths.SqlDataProvider</name>
          <version>00.00.01</version>
        </script>
        <script type="UnInstall">
          <path>Providers\DataProviders\SqlDataProvider</path>
          <name>Uninstall.SqlDataProvider</name>
          <version>00.00.01</version>
        </script>
    </scripts>
</component>

1 个答案:

答案 0 :(得分:0)

Dilon,

我认为DNN安装仅支持每个版本一个脚本文件。大多数情况下,模块CREATE TABLE / SPROC / VIEW脚本位于其第一个版本中,即:01.00.00。然后,后续脚本将具有alter table脚本或为该版本更改所需的任何内容。这是一种很好的做法,因为它允许您管理版本控制。如果修复了安装,您的脚本也应该可以重新运行。因此,您的CREATE语句应以IF EXISTS语句开头。

话虽这么说,如果你想打破你的脚本,你可以将软件包版本设置为01.00.00。

IE:

&lt; package name =“Module.Name”type =“Module”version =“00.01.00”&gt;

然后以不同方式编写脚本,即:“00.00.01”,“00.00.02”,“00.00.03”等.DNN将运行版本小于或等于包版本号。它还将以版本号顺序运行它们。