【问题标题】:Connection String Name连接字符串名称
【发布时间】:2016-11-04 23:58:56
【问题描述】:

所以我一直在思考如何通过自动化连接到我的数据库的连接字符串名称来让我的生活更轻松。我在笔记本电脑和工作时的 PC 上编程。他们使用不同的数据库。所以我创建了下面的代码并且它正在工作。但是,我不记得以前听说过这种方法,我想知道为什么?这是做这种事情的坏方法吗。可以理解的是,我必须在发布之前删除代码,但它确实看起来更容易在计算机之间切换,因为我不必在 Web.config 中注释/取消注释行。每个连接字符串名称都设置为 Web.config 中的计算机名称。

static string connectionStringName = System.Environment.MachineName;

    public ApplicationDbContext()
        : base(connectionStringName, throwIfV1Schema: false)
    {
    }

【问题讨论】:

    标签: c# asp.net-mvc web-config


    【解决方案1】:

    要考虑的另一种方法是利用 web.config transforms 并创建新环境(Dev-PC / Dev-Laptop),其中包含您需要的不同连接字符串。

    然后,当您启动 Visual Studio 时,您只需选择所需的构建配置文件,当您启动应用程序时,将使用适当的连接字符串。如果您需要使用两个环境之间不同的文件路径或其他配置,这将很有帮助。

    【讨论】:

    • 谢谢,Dillie-O。老实说,我对 Web 转换并没有真正的清楚了解,这就是我寻找更简单的东西的原因。
    • 我真的建议不要单独使用 web.config 转换 - 它们会强制您在每次部署到新目标环境时重新构建包,当您引入自动化发布流程时,这开始变得非常麻烦融入其中。
    • @physics90 - 如果它有助于解决 web.config 转换的困惑,这是我写的一篇关于如何启动和运行它的旧博客文章,这比听起来容易得多 - dillieodigital.wordpress.com/2010/09/27/… s3raph86 很好地说明了部署问题,但我在自己的 CI 环境中发现,Kudu / Azure / VS 可以轻松地在编译部署时定位正确的配置。您可能需要重新审视这一点,但如果您主要关心自己的开发工作,那么转换应该没问题。
    【解决方案2】:

    您的答案是结合使用 web.config 转换和您的 SetParameters.xml 文件。我知道他们一开始可能会让人望而生畏,但如果你把时间花在学习上,就会有回报。

    使用 web.config 转换,或根据机器名称命名连接字符串是 Bad Idea TM。这些解决方案工作,但它们要求您在每次发布到新环境时重新构建 WebDeploy 包。您需要一个可以将任何包部署到任何环境的解决方案。

    首先,您需要创建两个 web.config 转换。一个用于调试,一个用于发布。 Web.Debug.config 看起来像这样:

    <connectionStrings>
      <add name="MyDB" connectionString="Data Source=.\SQLExpress;Initial Catalog=MyDevDatabase;Integrated Security=True" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
    

    而您的 Web.Release.config 将包含一个占位符字符串。当您将包部署到目标环境中的 IIS 时,这些占位符将被更新。它应该是这样的:

    <connectionStrings>
      <add name="MyDB" connectionString="__targetenvironmentconnstring__" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
    

    要在您进行部署时获得目标环境连接字符串,您需要在您的 Web 项目的 Properties 下更新您的发布配置文件。您将为每个目标环境创建一个发布配置文件(使用 Package 选项);所以 QA.pubxml、UAT.pubxml、Production.pubxml 等。当您使用 Publish 对话框时,Visual Studio 将引导您完成创建这些文件的向导。现在打开每个文件。您需要编辑文件的末尾以合并 MSDeployParameterValue 元素,就像我在这里所做的那样

    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup> <!-- A bunch of info --> </PropertyGroup>
      <ItemGroup>
      <MSDeployParameterValue Include="$(DeployParameterPrefix)MyDB-Web.config Connection String">
        <ParameterValue><!-- Your target environment connection string goes here! --></ParameterValue>
      </MSDeployParameterValue>
    </Project>
    

    现在右键单击并在您的 Web 项目上发布,选择您想要的发布配置文件。在您指定的输出目录中,您将看到一个 SetParameters.xml 文件,其中包含您的目标连接字符串。这是部署时将进入 web.config 文件的内容,但至关重要的是,您也可以使用 IIS 手动导入包,并在部署时分配您自己的值,如下所示:

    最后,您可以使用ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString 引用您的连接字符串,无论您在什么环境中,您都获得了正确的值!

    要了解更多,我强烈建议阅读以下内容

    你需要转几圈,但你永远不会回头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-23
      • 2014-03-23
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多