app.config:ConnectionString值在其定义的项目中不可见

时间:2015-04-15 14:41:51

标签: c# visual-studio-2013

您好我在解决方案中有一些项目。 在项目A中,我有app.config,其连接字符串名为Ver3ConnectionString。但是当我进行调试时,在代码中找不到连接字符串:)。虽然调试连接字符串包含一个未在此app.config中定义的连接字符串,但在我的应用程序中为nether :)。我正在使用VS2013 Express:)。

此外,applicationSettings是在主项目:)中定义的,但不是一个被dubugged的。

魔术:)

增加:

  1. 这个解决方案是我的同事从现有项目创建的,所以我在解决方案/项目文件中寻找错误。

  2. MobileWalletContext类与EntityFramework 6.X连接。也许这就是问题?

  3. 新增2: 此未知连接字符串具有 name =" 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>
    

    调用connsterionString的C#代码:

    public MobileWalletContext() : base(string.Format("name={0}",ConfigurationManager.ConnectionStrings["Ver3ConnectionString"].ConnectionString))
            {          
    
                Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MobileWalletContext>()); 
            }
    

2 个答案:

答案 0 :(得分:3)

连接字符串的名称不太可能改变。因此,我会将上下文构造函数简化为:

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

这样我就可以使用Ver3ConnectionString名称在每个项目中定义不同的连接字符串。

修改

DbContext基础构造函数接受连接字符串名称或完整连接字符串。

在您的情况下,您只需创建一个具有提供的名称和默认设置的新连接字符串,而不是引用现有的连接字符串。这就是你看到LocalSqlServer的原因。

如果您在配置中传递现有连接字符串的名称,它将被选中并使用。

修改

确保您的连接字符串位于主项目目录中的app.configweb.config文件中。

答案 1 :(得分:0)

我想将此添加到@ Kaspars-Ozols所写的内容中:
LocalSqlServer是您的SQL Express安装,其配置通常驻留在像C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config这样的machine.config文件中。您可能有多个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>是一个好习惯。

<connectionStrings>
    <clear/>
    <add name="MembershipConnection" connectionString="Server=.;UId=some_user;PWd=P@$$w0rd;Database=DBName" providerName="System.Data.SqlClient" />
    <add name="ElmahConnection" connectionString="Server=.;UId=some_elmah_user;PWd=P@$$w0rd;Database=DBName" providerName="System.Data.SqlClient" />
</connectionStrings>