连接字符串和全局变量,带有dll的n层应用程序

时间:2014-06-24 15:08:23

标签: c# entity-framework asp.net-mvc-4 connection-string n-tier-architecture

层级应用程序有4层,如:

Presentation layer (MVC4)
Business layer (C# library project)
Data Access layer (c# library project)
Model layer (c# library project that contains models, EF dbcontext, etc)

所以在这个应用程序中,模型层包含EF db上下文,一些自定义模型和其他类似的东西,数据访问层包含对ef的查询和对db的一些直接查询,Business层包含业务逻辑和表示是一个mvc4项目。

业务,数据和模型层是图书馆项目。

mvc4 presentation layer has references to BL and ML.
BL has references to DAL and ML.
DAL has references to ML.

所以问题是:我应该在哪里保持字符串连接和全局变量? 最重要的是如何?

我应该将它们保存在mu mvc4应用程序的web.conf中吗?如果是这样,ML如何访问它?

还是应该在ML上?

3 个答案:

答案 0 :(得分:2)

是的,Connection Strings进入MVC4应用程序的web.config。在Model层中,您只需使用'System.Configuration.ConfigurationManger'对象从应用程序的配置中检索指定的连接字符串。

在引用的DLL中访问时,连接字符串和其他配置项是从运行DLL的应用程序的配置中获取的。这允许您根据您使用它的方式对DLL组件进行不同的配置。

例如,您通常会有一个连接字符串指向MVC4应用程序的web.config中的真实数据库。但是,为了为Model DLL编写测试,您可以在测试项目的app.config文件中使用不同的连接字符串,指向测试数据集。只要两个连接字符串具有相同的名称,Model.DLL就不必知道或关心它们来自何处。

答案 1 :(得分:2)

您的连接字符串应放在MVC4应用程序的Web.Config中。

在ML中,我想有一个DbContext的实现。只需将以下构造函数添加到该实现中即可。

public DatabaseContext() : base("ConnectionstringName") { }

在Web.config中,确保添加了相应的连接字符串。

<connectionStrings>
<add name="ConnectionstringName" .... />
</connectionstring>

答案 2 :(得分:2)

您的MVC应用程序是应用程序的聚合根。因此,所有服务/对象都应该在MVC中构建。保持连接字符串在web.config中是合乎逻辑的,并且有很好的方法可以将它们保留在那里,并通过web.config转换将dev字符串替换为生产字符串。