Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 连接字符串-N层应用程序_C#_Asp.net_Entity Framework_Connection String_Multi Tier - Fatal编程技术网

C# 连接字符串-N层应用程序

C# 连接字符串-N层应用程序,c#,asp.net,entity-framework,connection-string,multi-tier,C#,Asp.net,Entity Framework,Connection String,Multi Tier,我一直在挖掘这个问题的答案,但之前提出的所有问题似乎都是一个复杂的变化,没有回答这个问题,所以我想我应该问一下 我正在开发一个具有以下功能的三层应用程序 DAL-使用实体框架的数据访问层 BLL-业务逻辑层 Web应用程序-MVC Web应用程序 我已经创建了一个实体框架模型、存储库类,我的连接字符串位于DAL App.Config文件中。我现在在BLL中创建了我的第一个类,它引用了DAL。当尝试测试以下非常基本的方法时,我得到一个与BLL中丢失的连接字符串相关的错误 public stat

我一直在挖掘这个问题的答案,但之前提出的所有问题似乎都是一个复杂的变化,没有回答这个问题,所以我想我应该问一下

我正在开发一个具有以下功能的三层应用程序

  • DAL-使用实体框架的数据访问层
  • BLL-业务逻辑层
  • Web应用程序-MVC Web应用程序
我已经创建了一个实体框架模型、存储库类,我的连接字符串位于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;

    }
公共静态列表getItems(){
列表结果=新列表();
DAL.Repositories.ItemRepository myRepository=新建DAL.Repositories.ItemRepository();
结果=myRepository.GetAll().ToList();
返回结果;
}
为什么BLL要查找连接字符串?我是不是错过了一些很明显的东西


如果我需要跨多个层包含连接字符串,这违背了n层结构的目的,那么最好的方法是什么?有人能帮我解释一下吗?

您正在创建一个DAL实例,该实例将尝试查看您的配置文件(由于范围在业务层/单元测试中而未找到)。您应该做的是查看控制反转(IoC)并将DAL注入业务逻辑层。然后您可以模拟不会尝试并实际命中配置文件/数据库等的DAL。

按原样将连接字符串属性从app.config复制到web.config连接字符串部分…这将解决连接字符串应位于表示层上的问题(您的mvc项目)。只需在web.config中的
connectionStrings
节点上添加条目,并通过数据层上的
System.Configuration
读取即可

在web.config中定义一个连接字符串

<connectionStrings>
    <add name="ConnectionStringName" connectionString="Data Source=.\SQLEXPRESS; Database=DataBaseName;..." providerName="System.Data.SqlClient" />
</connectionStrings>
要从配置文件中读取并获取字符串,您必须为
System.configuration
assembly添加一个引用,然后尝试以下操作:

using System.Configuration;

string connectionString = ConfigurationManager.ConnectionStrings["connectionStringName"].ConnectionString;

它可能会“解决”,但请添加一个解释,解释OP所做的事情为什么不起作用,以及为什么会起作用。(我已经知道,但这是一个基本的问题-它需要一个基本的答案。)我很乐意接受你的解释。我只是敦促你改进你的答案,解释它为什么起作用。=)感谢您的回复。DAL和BLL是类库,没有web.config文件。但是,问题其实是为什么我会看到这个问题,并试图理解这个问题。我意识到连接字符串设置不存在于BLL App.config文件中,而是存在于DAL App.config中。我可以复制信息,但不能n层方法的好处应该是分离关注点,我希望这样做是正确的。我不想复制设置,除非我真的必须这样做。谢谢你的回答。我理解你指的是什么,但我如何在BLL中重用MVC Web应用程序中的连接字符串,而不在BLL的App.Config中复制它。
using System.Configuration;

string connectionString = ConfigurationManager.ConnectionStrings["connectionStringName"].ConnectionString;