1


1)默认情况下,配置元素的connectionStringName属性设置为LocalSqlServer,据我所知,该属性是指在machine.config文件中 的元素。

a)我假设这个连接字符串是指数据库aspnetdb.mdf?!

b) 我了解aspnetdb.mdf用于我们不手动创建成员资格或配置文件数据库(通过调用aspnet_regsql)的情况,但我仍然不明白将connectionStringName属性设置为LocalSqlServer设置的配置元素的目的?即,他们何时以及为什么需要访问该数据库?

c) 如果我们通过aspnet_regsql手动设置成员数据库,因此不使用aspnetdb.mdf会发生什么?配置元素如何知道我们没有使用aspnetdb.mdf并因此尝试访问我们创建的数据库?


2) 如果我们希望machine.config中的LocalSqlServer条目指向其他数据库文件,我们可以执行以下操作:

      <connectionStrings>
        <remove name="LocalSqlServer" />
        <add name=”LocalSqlServer” ...  />
      </connectionStrings>

我知道 <remove>element 的目的是取消任何以前声明的同名元素,但在上面的例子中,我们只是改变了已经存在的连接的属性,因此machine.config没有两个同名的连接,所以为什么我们必须包含<remove>元素吗?


谢谢

4

2 回答 2

2

MSDN 上的 connectionStrings 元素文章

父配置文件中包含的连接字符串会被继承,除非子配置文件中使用了 clear 元素。以下默认 connectionStrings 元素在 Machine.config 文件中配置。复制代码

<connectionStrings>
    <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated
        Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User
        Instance=true" providerName="System.Data.SqlClient" />
</connectionStrings>

因此,如果未修改配置文件的该部分,它会自动具有该连接字符串。

于 2009-06-20T21:47:37.963 回答
1

使用的约定是可以选择完成相同任务的众多约定之一,但当时在 MS 的 ASP.NET 团队中的人确实是唯一能说出“为什么”那套约定的人用过的。我的理解是,当前配置的目的是让初学者尽可能容易上手。即运行一些向导,使用预先配置的设置自动生成数据库,拖放一些安全控件,它们可以使用。由于这是为初学者设计的,因此更有经验的开发人员会遇到与您现在遇到的相同的问题,因为深入研究这些部分如何组合在一起并不简单。

您会在 machine.config 中注意到的一件事是所有提供者(成员身份、角色、配置文件等)都使用此 LocalSqlServer 连接字符串名称,它再次支持初学者场景。因此,要使用自己的数据库,需要去掉LocalSqlServer的默认定义,自己定义。配置文件定义中没有替换元素,因此您必须使用删除/添加序列,这是逻辑等价的。通过更改连接字符串并将其名称保留为 LocalSqlServer,machine.config 中的所有提供程序都指向您的数据库。这为您提供了数据库的默认提供程序定义。

现在,如果您想自定义提供程序定义,您可以将它们添加到您自己的 Web.config 并更改它们的设置。此时,您可以将 LocalSqlServer 作为自定义提供程序定义的连接字符串,或者您可以创建自己的连接字符串,然后将自定义提供程序定义指向您自己的连接字符串,您将不再需要担心 LocalSqlServer。如果从 web.config 中删除 LocalSqlServer,则需要将自定义提供程序定义添加到引用数据库字符串的自己的 web.config。

希望这可以帮助,

于 2009-06-20T21:05:08.707 回答