Назначение элементов, у которых для их connectionStringName установлено значение LocalSqlServer? - PullRequest
1 голос
/ 21 июня 2009


1) По умолчанию элементы конфигурации имеют свой атрибут connectionStringName , установленный на LocalSqlServer , и, насколько я знаю, этот атрибут относится к соединению, определенному в элемент в файле machine.config .

a) Я предполагаю, что эта строка подключения относится к базе данных aspnetdb.mdf ?!

b) Я понимаю, что aspnetdb.mdf используется в тех случаях, когда мы не создаем вручную членство или базу данных профиля (путем вызова aspnet_regsql ), но я все еще не понимаю назначение элементов конфигурации с установленным атрибутом connectionStringName равным LocalSqlServer ? А именно, когда и зачем им нужен доступ к этой базе данных?

в) Что произойдет, если мы вручную установим базу данных членства через aspnet_regsql и, следовательно, не будем использовать aspnetdb.mdf ? Как элементы конфигурации узнают, что мы не используем aspnetdb.mdf и, таким образом, вместо этого попытаемся получить доступ к базе данных, которую мы создали?


2) Если бы мы хотели, чтобы LocalSqlServer запись из machine.config указывала на какой-либо другой файл базы данных, мы могли бы сделать следующее:

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

Я понимаю, что цель элемента <remove> состоит в том, чтобы отменить любые ранее объявленные элементы с тем же именем, но в приведенном выше примере мы просто изменили атрибут уже существующего соединения, и как таковой machine.config не имеет двух соединений с одинаковыми именами, так почему мы должны включить элемент <remove>?


1056 * спасибо *

Ответы [ 2 ]

2 голосов
/ 21 июня 2009

Из статьи элемента connectionStrings в MSDN :

Содержащие строки подключения в родительском конфигурационном файле наследуется, если только элемент используется в дочернем файле конфигурации. Следующий по умолчанию Элемент 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>

Таким образом, если этот раздел файла конфигурации не изменяется, он автоматически получает эту строку подключения.

1 голос
/ 21 июня 2009

Используемое соглашение является одним из многих, которые можно было бы выбрать для выполнения той же задачи, но люди, которые были в команде ASP.NET в MS в то время, действительно единственные, кто может сказать «почему» этот набор конвенций был использован. Насколько я понимаю, цель текущей конфигурации состоит в том, чтобы сделать ее как можно более легкой для начинающего. то есть запустить несколько мастеров, автоматически сгенерировать базу данных с предварительно сконфигурированными настройками, перетащить несколько элементов управления безопасностью и им есть с чем работать. Так как это было разработано для начинающих, более опытные разработчики сталкиваются с тем же набором вопросов, что и сейчас, потому что копаться в том, как части сочетаются друг с другом, не просто.

Одна из вещей, которую вы заметите в machine.config, заключается в том, что все провайдеры (членство, роли, профиль и т. Д.) Используют это имя строки подключения LocalSqlServer, которое снова поддерживает сценарий новичка. Поэтому, чтобы использовать свою собственную базу данных, вам нужно удалить определение LocalSqlServer по умолчанию и определить свое собственное. В определении файла конфигурации нет элемента replace, поэтому вы должны использовать последовательность удаления / добавления, которая является логическим эквивалентом. Изменяя строку подключения и оставляя ее имя как LocalSqlServer, все провайдеры в machine.config обращаются к вашей БД. Это дает вам определения поставщиков по умолчанию для вашей базы данных.

Теперь, если вы хотите настроить определения провайдера, вы можете добавить их в свой собственный Web.config и изменить их настройки. В этот момент вы можете оставить LocalSqlServer в качестве строки подключения для определений настраиваемого поставщика, или вы можете создать свою собственную строку подключения, а затем указать свои определения настраиваемого поставщика в своей строке подключения, и вам больше не нужно будет беспокоиться о LocalSqlServer. Если вы удалите LocalSqlServer из вашего web.config, вам нужно добавить собственные определения провайдера в ваш собственный web.config, которые ссылаются на строку вашей базы данных.

Надеюсь, это поможет,

Джо

...