2015-04-15 4 views
0

Привет, У меня есть несколько проектов в решении. В проекте A у меня есть app.config со строкой соединения Ver3ConnectionString. Но когда я отлаживаю, строка подключения не найдена в коде :). В то время как отладка строк подключения содержит ту, которая не определена в этом app.config, в моем приложении :). Я использую VS2013 Express :).app.config: Значение ConnectionString не отображается в проекте, где оно определено

Кроме того, applicationSettings - это те, которые определены в основном проекте :), но не тот, который подгружается.

Magic :).

ДОБАВЛЕНО:

  1. Решение было создано моим коллегой из существующего проекта, так Im ищет ошибки в файлах решения/проекта.

  2. Класс MobileWalletContext связан с EntityFramework 6.X. Может быть, это проблема?

Добавлено 2: Эта неизвестная строка подключения имеет имя = "LocalSqlServer". Может быть, это будет полезно?

App.config:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <connectionStrings>  
    <add name="Ver3ConnectionString" 
     connectionString="Data Source=PAZI-PRO2\SQLEXPRESS;Initial Catalog=MobileWalletVer3;Integrated Security=True" 
     providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="mssqllocaldb" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 
</configuration> 

C# код, где connsterionString называется:

public MobileWalletContext() : base(string.Format("name={0}",ConfigurationManager.ConnectionStrings["Ver3ConnectionString"].ConnectionString)) 
     {   

      Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MobileWalletContext>()); 
     } 

ответ

3

Имя строки подключения, скорее всего, изменится. Поэтому я хотел бы упростить контекст конструктор:

public MobileWalletContext() : base("Ver3ConnectionString") 
{   
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MobileWalletContext>()); 
} 

Таким образом, я мог бы определить другую строку соединения в каждом проекте, используя Ver3ConnectionString имя.

EDIT

DbContext базовый конструктор принимает как имя строки соединения или полную строку подключения.

В вашем случае вместо ссылки на существующую строку соединения вы просто создаете новую строку соединения с предоставленным именем и настройками по умолчанию. Вот почему вы видите LocalSqlServer.

Если вы передадите имя существующей строки подключения в config, оно будет выбрано и использовано.

EDIT

Убедитесь, что ваши строки соединения в app.config или web.config файл в главном каталоге проекта.

+0

Я понимаю изменение, но я хочу полностью его раскрыть :). –

+0

Отредактировал мой ответ, чтобы добавить некоторые детали. –

+0

Я изменил вызов базового конструктора: base («name = XXX»), где XXX - это имя строки подключения, но у меня есть ошибка: в приложении не может быть найдена строка с именем «XXX» файл конфигурации. Magic again :) –

0

Я хотел бы добавить это к тому, что @ Каспарсу-Озолс писал:
LocalSqlServer вашей установки SQL Express и его конфигурация обычно находится в machine.config файл как C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config. У вас может быть более 1 machine.config [2 runtimes (2.0 and 4.0)] x [2 Bitness (x86 and x64)] составляет 4 файла 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> 

Это хорошая привычка использовать <clear /> в самом начале <appSettings> или <connectionStrings> секций.

Смежные вопросы