Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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
.net 在n层应用程序中,将连接字符串放在何处?_.net_Entity Framework_Architecture - Fatal编程技术网

.net 在n层应用程序中,将连接字符串放在何处?

.net 在n层应用程序中,将连接字符串放在何处?,.net,entity-framework,architecture,.net,Entity Framework,Architecture,我使用实体framwerok创建了一个DAL。我还创建了业务服务层和表示层(web应用程序)。 我的常识是,连接字符串应该只在DAL中使用,但表示层也需要连接字符串 那么,对于这种情况,最佳做法是什么?有没有办法只在DAL中使用连接字符串?您的连接字符串通常位于web.config中,并且可以从web.config访问。除非您别无选择,否则您可能永远不应该硬编码连接字符串(我想不出任何您不应该硬编码的情况)。您通常将连接字符串放在配置文件中,并且使用的配置文件是用于执行程序集的文件。对于一个网站

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


那么,对于这种情况,最佳做法是什么?有没有办法只在DAL中使用连接字符串?

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

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


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

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

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

我有一个DAL,它在实例化时将连接字符串作为参数。使用DAL的层负责获取它。这样,如果DAL在Windows或web应用程序中,它就不会改变。使用singleton模式,每个应用程序只实例化一次我的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();

为什么表示层需要连接字符串?Q:“有没有办法只在DAL中使用连接字符串?”,确保DAL是连接到数据库的唯一层。to C.Ross:当我从web.config中删除连接字符串时,我得到一个错误:指定的命名连接在配置中找不到,不打算与EntityClient提供程序一起使用,或者无效。这是DAL中的设计器文件grom。对marcc:DAL中有一个edmx文件,该层被引用到业务层,在该层中我有一个使用linq查询实体的方法。此方法在表示层中用于获取gridview的数据源。@RichardOD--我在其中加入了这个警告,现在我必须对显而易见的内容进行更新投票。萝莉:我理解这个理论,但在我的情况下,它就是不起作用。在我的DAL中,我使用实体框架。这一层被引用到业务层。在这一层中,我有一个返回IEnumerable的L2E查询。此查询从表示层调用,并指定为gridview的数据源。奇怪的是,我需要表示层中的连接字符串,否则它将无法工作。我还需要在演示中引用DAL,否则它将不起作用。我做错了什么,但我不知道。。。