【问题标题】:Connection String - N-Tier Application连接字符串 - N 层应用程序
【发布时间】:2013-01-03 14:17:25
【问题描述】:

我一直在寻找这个问题的答案,但之前提出的所有问题似乎都是一个复杂的变体,并且没有回答这个问题,所以我想我应该问一下。

我正在开发一个三层应用程序,其内容如下.....

  • 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;

    }

BLL 为什么要寻找连接字符串?我在这里遗漏了一些非常明显的东西吗?

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

【问题讨论】:

    标签: c# asp.net entity-framework connection-string multi-tier


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      按原样将连接字符串属性从 app.config 复制到 web.config 连接字符串部分...这将解决

      【讨论】:

      • 它可能会“解决”,但请解释为什么 OP 正在做的事情不起作用,以及为什么会这样。 (我已经知道了,但这是一个基本问题 - 它需要一个基本答案。)
      • 喜欢你的解释
      • 我只是敦促您通过解释 为什么 来改进您的答案。 =)
      • 感谢您的回复。 DAL 和 BLL 是类库,没有 web.config 文件。但是,问题实际上是围绕我为什么会看到问题并尝试理解问题。我意识到连接字符串设置不在 BLL App.Config 文件中,但在 DAL App.Config 中。我可以复制信息,但 n 层方法的好处应该是关注点分离,我想正确地做到这一点。我不想复制设置,除非我真的必须这样做。
      【解决方案3】:

      连接字符串应该在您的表示层(在您的情况下为 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;
      

      【讨论】:

      • 感谢您的回复。我明白你指的是什么,但是我如何在 BLL 中重用 MVC Web 应用程序中的 ConnectionString 而不在 BLL 的 App.Config 中复制它。
      猜你喜欢
      • 1970-01-01
      • 2014-08-14
      • 2011-04-19
      • 2014-12-08
      • 2023-03-27
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多