2016-11-04 2 views
0

Так что я думал о том, как сделать мою жизнь проще, автоматизируя имя строки подключения, используемое для подключения к моим базам данных. Я программирую на своем ноутбуке и на ПК на работе. Они используют разные базы данных. Поэтому я создал код ниже, и он работает. Тем не менее, я не помню, чтобы когда-либо слышал об этом методе раньше, и мне интересно, почему? Это плохой способ делать подобные вещи. Понятно, что я должен удалить код перед его выпуском, но, похоже, было бы проще переключиться между компьютерами, поскольку мне не нужно комментировать/раскомментировать строки в Web.config. Каждому имени строки подключения присваивается имя компьютера в Web.config.Connection String Name

static string connectionStringName = System.Environment.MachineName; 

    public ApplicationDbContext() 
     : base(connectionStringName, throwIfV1Schema: false) 
    { 
    } 

ответ

3

Другой подход рассмотреть бы используя web.config transforms и создавать новые среды (Dev-PC/Dev-Laptop), который содержит имеет различные строки соединения вам нужно.

Затем, когда вы запускаете Visual Studio, вы можете просто выбрать профиль сборки, который вам нужен, и когда вы запустите приложение, будут использованы соответствующие строки подключения. Это будет полезно, если вам нужно использовать пути к файлам или другие конфигурации, которые будут отличаться между двумя средами.

+0

Спасибо, Дилли-О. Честно говоря, у меня нет четкого понимания веб-преобразований, поэтому я искал что-то более простое. – physics90

+0

Я действительно рекомендую не использовать преобразования web.config самостоятельно - они заставляют вас перестраивать ваш пакет при каждом развертывании в новую целевую среду, которая начинает становиться ДЕЙСТВИТЕЛЬНО громоздкой, когда вы привносите в процесс автоматизированные процессы выпуска. – s3raph86

+1

@ physics90 - Если это вообще помогает с путаницей преобразований web.config, вот старый пост в блоге, который я написал о том, как его запустить и запустить, что намного проще, чем кажется - https: //dillieodigital.wordpress .com/2010/09/27/tame-your-configurationdeployments-with-web-config-transforms/ s3raph86 дает хорошее представление о проблемах развертывания, но я нашел в своих собственных средах CI, что Kudu/Azure/VS упрощает настройку правильной конфигурации при компиляции для развертывания. Возможно, вам придется пересмотреть это, но если вы в основном занимаетесь своей собственной работой с разработчиками, преобразования должны быть прекрасными. –

1

Ваш ответ заключается в использовании комбинации преобразований web.config и файла SetParameters.xml. Я знаю, что сначала они могут казаться сложными, но если вы вкладываете время в обучение, это окупается.

Использование преобразований web.config или присвоение имен вашим строкам соединения на основе имен машин Плохая идея TM. Эти решения будут работать, но они требуют, чтобы вы перестраивали свой пакет WebDeploy каждый раз, когда вы отправляете в новую среду. Вы хотите решение, которое позволяет развертывать любой пакет в любой среде.

Во-первых, вам нужно создать два преобразования web.config. Один для Debug и один для Release. Web.Debug.config будет выглядеть примерно так:

<connectionStrings> 
    <add name="MyDB" connectionString="Data Source=.\SQLExpress;Initial Catalog=MyDevDatabase;Integrated Security=True" 
    xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 
</connectionStrings> 

В то время как ваш Web.Release.config будет содержать строку-заполнитель. Эти заполнители будут обновлены при развертывании вашего пакета в IIS в целевой среде. Он должен выглядеть следующим образом:

<connectionStrings> 
    <add name="MyDB" connectionString="__targetenvironmentconnstring__" 
    xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 
</connectionStrings> 

Чтобы получить строку подключения целевой среды на месте, когда вы делаете вашу Deploy, вам необходимо обновить опубликовывать профили под Свойства в вашем веб-проекте. Вы создадите один профиль публикации (используя опцию Package) для каждой целевой среды; поэтому QA.pubxml, UAT.pubxml, Production.pubxml и т. д. Visual Studio проведет вас через мастер для создания этих файлов, когда вы используете диалоговое окно Publish. Теперь откройте каждый файл. Вы хотите, чтобы изменить конец файла, чтобы включить MSDeployParameterValue элементы, как я сделал здесь

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> <!-- A bunch of info --> </PropertyGroup> 
    <ItemGroup> 
    <MSDeployParameterValue Include="$(DeployParameterPrefix)MyDB-Web.config Connection String"> 
    <ParameterValue><!-- Your target environment connection string goes here! --></ParameterValue> 
    </MSDeployParameterValue> 
</Project> 

Теперь щелкните правой кнопкой мыши и опубликовать на своем веб-проекте, выбрав публикацию профиля вы хотите. В указанном каталоге вывода вы увидите файл SetParameters.xml, который содержит вашу целевую строку соединения. Это то, что войдет в вашу сеть.конфигурационный файл при развертывании, но самое главное, вы можете просто импортировать пакет вручную с помощью IIS, и назначить свои собственные значения во время развертывания, как это:

enter image description here

Наконец, вы можете просто ссылаться на строки подключения с помощью ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString, и у вас есть правильное значение, независимо от того, в какой среде вы находитесь!

Чтобы лучше понять, я настоятельно рекомендую прочитать следующие

Это занимает несколько идет обернуть вокруг головы, но вы никогда не будете возвращаться.