在C#中,为什么连接字符串不作为对象公开?

问题描述 投票:0回答:3

是否有任何特殊原因,我缺少,因为连接字符串需要作为字符串,但不作为对象公开?我的意思是,如果我们可以在某种依赖注入服务公开的对象中设置完全相同的选项,为什么我们总是要构造一个这种丑陋形式的字符串'Data Source=MSSQL1;Initial Catalog=AdventureWorks;Integrated Security=true'。或者其他任何能够消除我们用心学习关键词的需要的东西。

c# .net entity-framework
3个回答
3
投票

您的问题可以分两部分来回答。

首先,连接设置表示为字符串的原因是因为它们通常在配置中设置,并且不会更改应用程序的部署。一旦它们被设定,它们就会被设定,很少,如果有的话,需要改变它们。因此,表示配置中的连接的单个字符串通常都是需要的。它简单明了。

其次,您可以使用SqlConnectionStringBuilder类绝对使用对象来表示连接设置。您还没有听说过它,因为它没有被太多使用,并且它没有被大量使用,因为我们很少需要在运行时修改我们的连接设置。我唯一一次使用SqlConnectionStringBuilder是因为我想解析一个连接字符串来记录它而没有像密码这样的敏感位。


5
投票

TL; DR:主要原因是连接字符串应位于配置文件中。这意味着数据需要符合配置文件的格式。简单的字符串(与属性集合相对)适用于每种类型的配置文件,并且不需要特定于格式的语法。 JSON或XML配置文件。


其次,并非每个连接字符串都使用完全相同的属性。某些属性是互斥的(例如,集成安全性与登录凭据),某些属性对于不同的数据提供者具有不同的名称。

Connectionstrings.com是连接线变化的一个很好的例子。您将看到并非每个字符串都使用每个属性。

更新 - This is a list of connection string properties专门连接到Analysis Services。这甚至不会影响其他数据提供者,并且看看属性集合的复杂程度。

如果要创建一个对象来表示你的连接字符串,则必须公开所有可能的属性,这超出了普通开发人员所需的属性,从而导致大量冗余(和空)设置。

第三,您通常不只是更改连接字符串的其中一个设置。 Connectionstrings被视为一个整体,因为在创建它们之后,您基本上使用“DEV connectionstring”或“TEST connectionstring”。 为此,简单地将连接线视为整个对象而不是属性集合通常更安全。

最后,如果您真的想通过其各自的属性定义您的连接字符串,您仍然可以这样做。 SqlConnectionStringBuilder就是出于这个目的而存在的。

但是,由于我上面提到的原因,大多数开发人员不构造自己的连接字符串而是将它们用作配置键。


1
投票

IMO最重要的原因是鼓励开发人员将整个连接字符串存储为配置参数。

这使您可以更改所需的连接字符串的任何部分,而无需重新构建和重新部署应用程序。

如果您选择使用配置参数来仅设置单个连接字符串参数(如服务器名称和数据库名称),则无法连接到命名实例,设置只读意图,调整连接池参数等,而无需更改源代码。

这可能是历史原因,连接字符串因ADO.NET提供程序而异,ADO.NET旨在实现与提供程序无关的代码。从.NET 2.0开始,您甚至可以编写对特定ADO.NET提供程序没有编译时依赖性的端到端应用程序。见ADO.NET Facory Model Overview

© www.soinside.com 2019 - 2024. All rights reserved.