Sql server visual studio中asp.net网站和数据库的合理结构

Sql server visual studio中asp.net网站和数据库的合理结构,sql-server,asp.net-mvc,Sql Server,Asp.net Mvc,我的主要问题是数据库去哪里了 该项目将在SVN上,并使用asp.NETMVC存储库模式开发。我应该将sql server数据库(mdf文件)放在哪里?如果我把它放在app_数据中,那么我的其他团队成员可以检查源代码和数据库,并使用部署在vs实例中的数据库运行它 这种方法的问题是: 我无法将SQL Management Studio用于此数据库 大多数web主机要求我使用其UI或SQL Management studio部署数据库。将其放入应用程序数据中毫无意义 每次从本地测试转到web主机测试时

我的主要问题是数据库去哪里了

该项目将在SVN上,并使用asp.NETMVC存储库模式开发。我应该将sql server数据库(mdf文件)放在哪里?如果我把它放在app_数据中,那么我的其他团队成员可以检查源代码和数据库,并使用部署在vs实例中的数据库运行它

这种方法的问题是:

  • 我无法将SQL Management Studio用于此数据库
  • 大多数web主机要求我使用其UI或SQL Management studio部署数据库。将其放入应用程序数据中毫无意义
  • 每次从本地测试转到web主机测试时,都必须编辑连接字符串
  • 如果我使用SQL Management studio创建数据库,我的问题是:

  • 如何使其与源代码管理保持一致(如果模式更改,团队成员必须重新编写数据库脚本)
  • 再次输入连接字符串。(我希望在生产服务器上自动使用该字符串)

  • 我上面所有的问题都有解决办法吗?也许我缺少某种形式的工具模式?

    使用management studio或Visual studio server explorer。App_数据在“现实世界”中使用不多

  • 这一直是个问题。使用类似Visual Studio 2010的工具或内置数据库比较工具

  • 用于自动更新连接字符串


  • 使用management studio或Visual studio服务器资源管理器。App_数据在“现实世界”中使用不多

  • 这一直是个问题。使用类似Visual Studio 2010的工具或内置数据库比较工具

  • 用于自动更新连接字符串


  • 我无论如何都不是专家,但以下是我和我的合作伙伴为我们最近的ASP.NET MVC项目所做的:

    连接字符串总是相同的,因为我们都在开发机器上运行SQLServerExpress,我们的暂存服务器和生产服务器也是如此。您可以只使用点而不是计算机名(例如“.\SQLEXPRESS”或“.\SQL\u Named\u Instance”)

    或者,您也可以使用web.config转换来部署到不同的计算机


    至于数据库本身,我们只是在SVN存储库中创建了一个“databaseupdates”文件夹,并在需要进行更新时添加了新的SQL脚本。我一直认为组织数据库更改脚本集合是一个好主意。

    我无论如何都不是专家,但我的合作伙伴和我在最近的ASP.NET MVC项目中做了以下工作:

    连接字符串总是相同的,因为我们都在开发机器上运行SQLServerExpress,我们的暂存服务器和生产服务器也是如此。您可以只使用点而不是计算机名(例如“.\SQLEXPRESS”或“.\SQL\u Named\u Instance”)

    或者,您也可以使用web.config转换来部署到不同的计算机


    至于数据库本身,我们只是在SVN存储库中创建了一个“databaseupdates”文件夹,并在需要进行更新时添加了新的SQL脚本。我一直认为组织一个数据库更改脚本集合是一个好主意。

    基本上你的两点是正确的-除非你使用的是中央数据库,否则当其他人进行更改时,每个人都必须更新他们的数据库。如果您使用的是一个中央数据库,那么您还可能会遇到数据库更改(即:删除一列)以及相应的源代码未签入的问题。然后,在源代码被签入或数据库被回滚之前,您都会死在水里。使用中央数据库也意味着开发人员无法控制何时将数据库模式更改推送到他们手中

    我们在每个开发人员的机器上都安装了数据库(特别好,因为我们针对不同的数据库,每个开发人员都有一个受支持的数据库,在进行跨平台测试时提供了非常好的性能)

    然后是“开发”环境指向的中央“开发”数据库。它是通过每次签入的持续集成来构建的,并且在成功构建/测试后发布给开发人员

    开发人员在本地计算机上对数据库模式所做的更改需要签入源代码管理。它们是数据库升级脚本,用于对数据库进行从版本X到版本Y的必要更改。数据库已进行版本控制。当客户升级时,这些数据库脚本将在其数据库上运行,以将其从当前版本升级到安装所需的版本

    这些dbpatch文件存储在以下结构中:

    ./dbpatches
        ./23
            ./common
                ./CONV-2345.dbpatch
            ./pgsql
                ./CONV-2323.dbpatch
            ./oracle
                ./CONV-2323.dbpatch
            ./mssql
                ./CONV-2323.dbpatch
    
    在上面的树中,版本23有一个在任何数据库上运行的公共dbpatch(是ANSI SQL),以及一个针对需要特定于供应商的SQL的三个数据库的特定dbpatch

    我们有一个开发人员可以运行的数据库更新脚本,它可以运行任何尚未在其开发机器上运行的dbpatch(不考虑版本-因为在单个版本的开发过程中,可能会将多个dbpatch提交给源代码控制)

    连接字符串保存在NHibernate.config中,但是如果存在,则使用NHibernate.User.config,但是从源代码管理中忽略NHibernate.User.config。每个开发人员都有自己的NHibernate.User.config,它指向本地数据库并设置适当的方言等


    在进行开发时,我们有一个NAnt脚本,它在配置模板中为我们进行变量替换。在准备登台以及进行发布包时,也会使用相同的脚本。NAnt脚本使用环境设置文件中的变量值填充模板配置文件。

    基本上,您的两点是正确的-除非您使用的是中央数据库,否则每个人都必须upd