我有一个Web应用程序,包括以下内容:
一个Web项目(包含连接字符串的web.config文件 - 但Web项目中没有数据访问代码)
一个数据访问项目,它使用LINQ-SQL类为Web项目UI提供实体(该项目有一个设置文件和一个app.config - 两者都有连接字符串)
当我构建和部署时,Bin目录中没有设置文件或app.config,数据访问.dll,但更改web.config文件中的连接字符串不会相应地更改数据库 - 因此连接字符串必须被编译成数据访问dll.
我需要的是我的整个部署的一个配置文件 - 网站,数据访问dll,一切 - 有一个连接字符串被使用.目前,似乎有多个连接字符串在整个地方被使用或硬编码.
我如何才能最好地解决这个烂摊子?
谢谢你的帮助.
我从未遇到过数据访问层(DAL)能够使用我web.config
文件中的连接字符串的问题.通常我只是从DAL复制连接字符串部分并将其粘贴到web.config
.我正在使用DBML设计器来创建数据上下文.
如果这不适合您,您可以在数据上下文构造函数中指定连接字符串.在您的Web项目中有一个静态类来加载您的设置,包括您的连接字符串,当您创建DAL对象(或数据上下文,如果直接创建它)时,只需将其传递给构造函数.
public static class GlobalSettings { private static string dalConnectionString; public static string DALConnectionString { get { if (dalConnectionString == null) { dalConnectionString = WebConfigurationManager .ConnectionStrings["DALConnectionString"] .ConnectionString; } return dalConnectionString; } } } ... using (var context = new DALDataContext(GlobalSettings.DALConnectionString)) { ... }
启动项目的配置文件将定义所有包含项目的配置设置.例如,如果您的Web项目是启动项目,则对"appSettings"的任何引用都将从web.config中查找设置,其中包括对数据访问项目中"appSettings"的任何引用.因此,将任何配置设置从Data Access项目的app.config复制到Web项目的web.config.
基于注册表滚动您自己的ConnectionFactory:
在SOFTWARE/[YOUR_COMPANY]/[YOUR_APP]下为您的应用程序添加注册表项
为ConnectionString添加一个字符串值
教你的ConnectionFactory破解相应的注册表项(在静态构造函数中,而不是每个页面加载!).
将注册表信息导出为.reg文件,将其添加到源代码管理,根据需要修改并应用它以设置其他计算机.
优点:
设置简单
Connectionstring位于一个地方
不在web/app.config中,因此无需硬编码特定于环境的设置.
不在web/app.config中,因此Junior Dev Jimmy不会意外地告诉您的生产服务器查看DEV数据库
缺点:
并不是很明显,重要的事情都存在于注册表中,所以新的开发人员需要指示.
配置新部署计算机时的额外步骤
注册表是oldskool.少年开发者会嘲笑你.