C# app.config:ConnectionString值在其所在的项目中不可见';定义

C# app.config:ConnectionString值在其所在的项目中不可见';定义,c#,visual-studio-2013,C#,Visual Studio 2013,嗨,我有几个解决方案项目。 在项目A中,我有一个app.config,其连接字符串名为Ver3ConnectionString。但是当我调试时,在代码中找不到连接字符串:)。调试连接字符串时,其中包含一个未在此app.config中定义的字符串,而我的应用中则包含以下字符串:)。我正在使用VS2013 Express:) 此外,应用程序设置是在主项目()中定义的设置,而不是被怀疑的设置 魔法:) 增加: 该解决方案是由我的同事从现有项目中创建的,因此我正在查找解决方案/项目文件中的错误 Mobi

嗨,我有几个解决方案项目。 在项目A中,我有一个app.config,其连接字符串名为Ver3ConnectionString。但是当我调试时,在代码中找不到连接字符串:)。调试连接字符串时,其中包含一个未在此app.config中定义的字符串,而我的应用中则包含以下字符串:)。我正在使用VS2013 Express:)

此外,应用程序设置是在主项目()中定义的设置,而不是被怀疑的设置

魔法:)

增加:

  • 该解决方案是由我的同事从现有项目中创建的,因此我正在查找解决方案/项目文件中的错误

  • MobileWalletContext类与EntityFramework 6.X连接。也许这就是问题所在

  • 增加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>()); 
            }
    
    public MobileWalletContext():base(string.Format(“name={0}”,ConfigurationManager.ConnectionString[“Ver3ConnectionString”].ConnectionString))
    {          
    SetInitializer(新的DropCreateDatabaseIfModelChanges());
    }
    
    连接字符串的名称不太可能更改。因此,我将上下文构造函数简化为:

    public MobileWalletContext() : base("Ver3ConnectionString")
    {          
        Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MobileWalletContext>()); 
    }
    
    public mobileewalletcontext():base(“Ver3ConnectionString”)
    {          
    SetInitializer(新的DropCreateDatabaseIfModelChanges());
    }
    
    这样,我可以使用
    Ver3ConnectionString
    name在每个项目中定义不同的连接字符串

    编辑

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

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

    若您在配置中传递现有连接字符串的名称,它将被拾取并使用

    编辑


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

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

    public MobileWalletContext() : base("Ver3ConnectionString")
    {          
        Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MobileWalletContext>()); 
    }
    
    public mobileewalletcontext():base(“Ver3ConnectionString”)
    {          
    SetInitializer(新的DropCreateDatabaseIfModelChanges());
    }
    
    这样,我可以使用
    Ver3ConnectionString
    name在每个项目中定义不同的连接字符串

    编辑

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

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

    若您在配置中传递现有连接字符串的名称,它将被拾取并使用

    编辑


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

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

    public MobileWalletContext() : base("Ver3ConnectionString")
    {          
        Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MobileWalletContext>()); 
    }
    
    public mobileewalletcontext():base(“Ver3ConnectionString”)
    {          
    SetInitializer(新的DropCreateDatabaseIfModelChanges());
    }
    
    这样,我可以使用
    Ver3ConnectionString
    name在每个项目中定义不同的连接字符串

    编辑

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

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

    若您在配置中传递现有连接字符串的名称,它将被拾取并使用

    编辑


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

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

    public MobileWalletContext() : base("Ver3ConnectionString")
    {          
        Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MobileWalletContext>()); 
    }
    
    public mobileewalletcontext():base(“Ver3ConnectionString”)
    {          
    SetInitializer(新的DropCreateDatabaseIfModelChanges());
    }
    
    这样,我可以使用
    Ver3ConnectionString
    name在每个项目中定义不同的连接字符串

    编辑

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

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

    若您在配置中传递现有连接字符串的名称,它将被拾取并使用

    编辑


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

    我想在@Kaspars Ozols所写的内容中添加以下内容:
    LocalSqlServer是您的SQL Express安装,其配置通常位于machine.config文件中,如
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config
    。您可能有超过1个machine.config
    [2个运行时(2.0和4.0)]
    x
    [2位(x86和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>
    
    
    
    部分的开头使用
    是一个好习惯。

    <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>
    

    我想将此添加到@Kaspars Ozols所写的内容中:
    LocalSqlServer是您的sqle