在哪里写连接字符串?在 app.config 还是 web.config 中?
在.NET框架中,连接字符串(connection string)是用于指定应用程序与数据库之间建立连接所需的信息。在一个解决方案中,可能存在多个项目(如Web项目和数据层项目),每个项目都有自己的配置文件(app.config或web.config)。那么问题来了,连接字符串应该写在哪个配置文件中呢?
根据上述提供的信息,我们可以得出结论:连接字符串应该写在web.config文件中。这是因为,默认情况下,应用程序会在执行程序集的配置文件中查找连接字符串,而忽略引用程序集的配置文件。而引用程序集的配置文件(app.config)主要用于设计时。例如,如果在数据层项目中使用Entity Framework,它会将用于从数据库构建模型的连接信息存储在app.config文件中。
当我们开始编写Web项目并通过数据层访问数据时,通常会将连接信息从app.config文件复制到web.config文件中。这样,在运行Web项目时,数据层将使用web.config文件中的连接字符串。
如果不在设计时使用连接字符串(例如使用EF Code-First),甚至可以将其从app.config文件中移除,只保留在Web项目的web.config文件中。
连接字符串应该写在web.config文件中,以确保在运行Web项目时数据层能够正确地使用连接信息。
在创建项目时,每个项目都会带有一个配置文件。普通的类库项目有一个名为app.config
的通用配置文件。Web项目则更具体一些,其配置文件为web.config
,包含了一些与Web相关的参数。它们的作用都是相同的。
你面临的问题是,只有可执行项目的配置文件(web.config)会被默认部署。你有几个选择:
- 将连接字符串添加到web.config中,并将其传递给数据层。这种方法简单(也是最常见的),但将配置信息与数据层项目分离。
- 让数据层使用
System.Configuration.ConfigurationManager
读取web.config。这样可以避免将数据传递给数据层,但会创建一个强依赖关系(没有正确格式的web.config文件,数据层将无法工作)。 - 将app.config作为XML内容部署,并编写自定义代码,使数据层能够读取它。这样做需要更多工作,但可以将数据配置从web.config中分离出来。
- 稍微修改#2的方法,可以在web.config中创建一个名为"dataLayer"的自定义配置节。可以通过
System.Configuration.ConfigurationManager
来读取它。我更喜欢这种方法,因为它看起来是一个很好的平衡。你在"默认"的配置文件中有一个自定义的强类型配置节。
这个相关问题也提供了一些很好的信息。
我已经在MVC项目中添加了数据层的引用,如何将其传递给数据层?
你可以按照这里的方法从web.config中读取它。然后只需将它作为一个字符串传递给数据层的方法或构造函数即可。