因此,我一直在考虑如何通过自动化用于连接到我的数据库的连接字符串名称来简化生活。我在我的笔记本电脑和工作的PC上编程。他们利用不同的数据库所以我创建了下面的代码并且它正在工作。但是,我不记得曾经听过这种方法,我想知道为什么?这是做这种事情的坏方法。可以理解的是,我必须在发布代码之前删除它,但看起来它似乎更容易在计算机之间切换,因为我不必在Web.config中注释/取消注释行。每个连接字符串名称都设置为Web.config中的计算机名称。
static string connectionStringName = System.Environment.MachineName;
public ApplicationDbContext()
: base(connectionStringName, throwIfV1Schema: false)
{
}
答案 0 :(得分:3)
另一种需要考虑的方法是利用web.config transforms并创建新环境(Dev-PC / Dev-Laptop),其中包含您需要的不同连接字符串。
然后,当您启动Visual Studio时,您只需选择所需的构建配置文件,并在启动应用程序时使用相应的连接字符串。如果您需要使用两种环境之间不同的文件路径或其他配置,这将非常有用。
答案 1 :(得分:1)
您的答案是使用web.config转换和SetParameters.xml文件的组合。我知道他们一开始看起来很令人生畏,但如果你把时间花在学习上,那就会有所回报。
使用web.config转换或根据计算机名称命名连接字符串是 Bad Idea TM 。这些解决方案将工作,但它们要求您在每次发布到新环境时重建WebDeploy包。您需要一个可以将任何软件包部署到任何环境的解决方案。
首先,您需要创建两个web.config转换。一个用于Debug,一个用于Release。 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项目中的属性下更新发布配置文件。您将为每个目标环境创建一个发布配置文件(使用 Package 选项);所以QA.pubxml,UAT.pubxml,Production.pubxml等等。当您使用发布对话框时,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>
现在,在您的网络项目上右键单击并发布,选择所需的发布配置文件。在您指定的输出目录中,您将看到包含目标连接字符串的SetParameters.xml文件。这是您部署时将进入web.config文件的内容,但关键的是,您也可以使用IIS手动导入包,并在部署时分配您自己的值,如下所示:
最后,您可以使用ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString
来引用您的连接字符串,无论您处于什么环境,都可以获得正确的值!
要了解更多信息,我强烈建议您阅读以下内容
需要花一些时间来包裹你,但你永远不会回去。