我已经有了解决这个问题的答案,但之前提出的所有问题似乎都是一个复杂的变化,并没有回答这个问题所以我想我应该问。
我正在开发一个包含以下内容的三层应用程序.....
我创建了一个Entity Framework模型,存储库类和我的连接字符串位于DAL App.Config文件中。我现在已经在BLL中创建了我的第一个类,它引用了DAL。当试图测试以下,非常基本的方法我得到一个与BLL中缺少连接字符串有关的错误。
public static List<DAL.Item> getItems() {
List<DAL.Item> result = new List<Item>();
DAL.Repositories.ItemRepository myRepository = new DAL.Repositories.ItemRepository();
result = myRepository.GetAll().ToList();
return result;
}
BLL为什么要查找连接字符串?我错过了一些非常明显的东西吗?
如果我需要在多个层中包含连接字符串,这会破坏n层结构的目的,那么最好的方法是什么?任何人都可以为我阐明这一点吗?
答案 0 :(得分:2)
你正在新建一个DAL实例,而后者将尝试查看你的配置文件(由于范围在业务层/单元测试中而找不到。你应该做的是查看Inversion Of控制(IoC)并将DAL注入业务逻辑层。然后你可以模拟你的DAL,它不会尝试并实际命中配置文件/数据库等。
答案 1 :(得分:0)
将连接字符串属性从app.config复制到web.config连接字符串部分......这个iwll解决方案
答案 2 :(得分:0)
连接字符串应位于表示层(在您的情况下为mvc项目)。只需在web.config中的connectionStrings
节点上添加该条目,然后通过数据层上的System.Configuration
读取该条目。
在web.config中定义一个连接字符串
<connectionStrings>
<add name="ConnectionStringName" connectionString="Data Source=.\SQLEXPRESS; Database=DataBaseName;..." providerName="System.Data.SqlClient" />
</connectionStrings>
在Entity-Framework的DataContext中,您可以传递web.config文件中的密钥
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext()
: base("ConnectionStringName")
{
}
// DbSet properties...
}
要从配置文件中读取并获取字符串,您必须添加System.Configuration
程序集的引用并尝试此操作:
using System.Configuration;
string connectionString = ConfigurationManager.ConnectionStrings["connectionStringName"].ConnectionString;