引用项目';中的EntityFramework连接字符串;的web.config

本文关键字:字符串 web config 连接 中的 项目 引用 EntityFramework | 更新日期: 2023-09-27 18:10:48

我的解决方案中有两个项目:一个ASP.NET MVC web应用程序项目,每个环境具有web.config(production/UAT/dev(,另一个DAL类库项目由使用EntityFramework Database First处理持久性的web项目引用。目前,DAL类库项目有自己的App.Config,用于指定要使用的连接字符串。

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

如何将连接字符串移动到web项目中的web.config,并在运行时从DAL项目中引用它们?

当前引用连接字符串名称的自动生成的EF Model.Context.cs代码为[为匿名而更改名称]:

public EodActivityEntities()
    : base("name=DatabaseNameEntities")
{
}

引用项目';中的EntityFramework连接字符串;的web.config

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

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

public EodActivityEntities()
    : base("name=DatabaseNameEntities")
{
}

当您将web应用程序作为启动项目运行时,它将从该项目的web.config中提取名称为DatabaseNameEntities的连接字符串,忽略DAL app.config中的内容。所以它已经在为你做了。因此,我想说,你根本不需要在DAL的app.config文件中有你的连接字符串。

现在,对于不同的环境,您需要不同的连接字符串。为您的环境创建新的解决方案配置DEV、UAT&LIVE,您可以使用web.config转换(此处和此处提供信息(,它将使用正确的连接字符串构建。

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

然后将每个环境的连接字符串移动到MVC项目,在那里可以使用web.config 中的值实例化上下文

var connectionString = WebConfigurationManager.AppSettings["connection"];
var context = new EodActivityEntities(connectionString);

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

当您从Web项目引用DAL项目时,生成的DAL.dll应在生成Web项目时自动复制到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