【问题标题】:where to put the connection string in a n-tier app?在 n 层应用程序中将连接字符串放在哪里?
【发布时间】:2009-09-09 19:48:12
【问题描述】:

我使用实体 framwerok 创建了一个 DAL。我还创建了一个业务服务层和一个表示层(网络应用程序)。 我的常识是告诉我连接字符串应该只在 DAL 中,但表示层也需要连接字符串。

那么这种情况的最佳做法是什么?有没有办法让连接字符串只在 DAL 中?

【问题讨论】:

  • 为什么表示层需要连接字符串?
  • 问:“有没有办法让连接字符串只在 DAL 中?” A:是的,确保 DAL 是唯一连接到数据库的层。
  • 致 C.Ross:当我从 web.config 中删除连接字符串时出现错误:在配置中找不到指定的命名连接,不打算与 EntityClient 提供程序一起使用,或无效。这是 DAL 中的设计器文件。 to marcc:DAL 中有 edmx 文件,该层被引用到业务层,其中我有一个使用 linq 查询实体的方法。此方法在表示层中用于获取 gridview 的数据源。

标签: .net entity-framework architecture


【解决方案1】:

您通常将连接字符串放在配置文件中,使用的配置文件是执行程序集的配置文件。对于网站,它将是 web.config。

为什么您的表示层需要访问连接字符串?

【讨论】:

    【解决方案2】:

    您的连接字符串通常位于 web.config 中并可以从 web.config 访问。除非您别无选择,否则您可能永远不应该对连接字符串进行硬编码(而且我想不出任何您不会这样做的情况)。

    【讨论】:

      【解决方案3】:

      如果表示层需要连接字符串,则说明您的设计存在缺陷。

      【讨论】:

      • @RichardOD -- 我要把这个警告放在那里,现在我必须支持显而易见的事情。大声笑
      【解决方案4】:

      数据抽象层应该是访问数据的唯一位置。您的表示层应该使用业务服务层,而业务服务层应该使用 DAL 进行数据访问。因此,您不需要从表示层直接访问数据源,连接字符串的唯一位置将在 DAL 中。

      【讨论】:

      • 我理解这个理论,但在我的情况下它并没有像这样工作。在我的 DAL 中,我使用的是实体框架。这一层被引用到业务层。在这一层中,我有一个 L2E 查询返回一个 IEnumerable。此查询从表示层调用并分配为网格视图的数据源。奇怪的想法是我需要表示层中的连接字符串,否则它将不起作用。我还需要在演示文稿中引用 DAL,否则它将不起作用。我做错了什么,但我不知道是什么......
      【解决方案5】:

      我有一个 DAL,它在实例化时将连接字符串作为参数。使用 DAL 的层负责获取它。这样,如果 DAL 在 Windows 或 Web 应用程序中,它就不会改变。我的 DAL 也只使用单例模式在每个应用程序中实例化一次,因此检索连接字符串的开销只支付一次。

              public sealed class cApp
              {
      
              static readonly cDB _cDB = new cDB(
          ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString);
      
              public static cDB DB
                  {
                      get
                      {
                          return _cDB;
                      }
                  }
      
              }
      

      然后在代码中我可以像这样使用它:

          GridView1.DataSource = cApp.DB.GetStages(id);
         GridView1.DataBind();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-25
        • 2011-08-13
        • 1970-01-01
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多