引用项目的web.config

时间:2015-09-02 13:19:04

标签: c# asp.net asp.net-mvc entity-framework

我的解决方案中有两个项目:一个ASP.NET MVC Web应用程序项目,每个环境{(1}}(生产/ UAT / dev)和另一个使用EntityFramework数据库的Web项目引用的DAL类库项目首先要处理持久性。目前,DAL类库项目有自己的web.config,它指定要使用的连接字符串。

对于不同的环境,我需要不同的连接字符串(或者更确切地说,不同的App.Config)。

我如何将连接字符串移动到Web项目中的data source并在运行时从DAL项目引用它们?

当前引用连接字符串名称的自动生成的EF web.config代码是[名称已更改为匿名]:

Model.Context.cs

3 个答案:

答案 0 :(得分:3)

您的应用程序只会在运行时读取一个51023\51023231app.config,这将是您启动项目中的一个。

因此,如果您的DAL中有以下内容:

web.config

...并且您将Web应用程序作为启动项目运行,它将从该项目的public EodActivityEntities() : base("name=DatabaseNameEntities") { } 中选择名为DatabaseNameEntities的连接字符串,忽略其中的内容你的DAL web.config。所以它已经为你做了。因此,我会说您根本不需要在DAL的app.config文件中添加连接字符串。

现在,对于不同的环境,您需要不同的连接字符串。为您的环境创建新的解决方案配置DEV,UAT& LIVE,你可以使用app.config转换(info herehere),它将使用正确的连接字符串进行构建。

答案 1 :(得分:1)

我建议在上下文的构造函数中传递连接字符串。 EF创建的基础构造函数接受一个字符串,可以是配置文件中的命名值,也可以是连接字符串本身。

然后将每个环境的连接字符串移动到MVC项目,在该项目中可以使用web.config

中的值来实例化上下文
var connectionString = WebConfigurationManager.AppSettings["connection"];
var context = new EodActivityEntities(connectionString);

Coulton是正确的,因为只会加载一个配置文件,解决方案可能是将连接字符串命名为相同,以便在运行应用程序时加载web.config。但是,这会扩展您的配置,而不是将其推送到应用程序的上下文根。

答案 2 :(得分:1)

当您从Web项目引用DAL项目时,构建的Web项目时,构建的DAL.dll应自动复制到Web项目的/ bin文件夹中。首先,检查确实发生了。如果没有,请查看Web项目参考,在列表中找到您的DAL项目并查看属性。 CopyLocal应设置为True。

当您的Web项目正在运行时,您的DAL对来自DAL的app.config的设置所做的任何引用都将来自您的Web应用程序的web.config,作为DAL将在Web应用程序的上下文中运行。

所以你是对的,你需要在web.config中添加设置。 对不同环境使用不同值的最佳方法是使用web.config转换。在Web应用程序中,您可能已经有几个这样的子解决方案文件位于web.config(web.debug.config& web.release.config)下。 Visual Studio将在发布时应用这些转换。我们通常有每个环境的发布配置文件和每个环境的匹配转换文件,但只有一个实际的web.config文件包含所有默认(未转换)设置。

您没有提到您正在使用的Visual Studio版本,但本文可能会帮助您: http://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/web-config-transformations

这进一步解释了:http://go.microsoft.com/fwlink/?LinkId=125889