WPF EF 6.0“在配置文件中找不到名为'xyz'的连接字符串

时间:2017-09-07 14:22:15

标签: c# entity-framework configuration

我从EF获得一个InvalidOperation异常,说“在配置文件中找不到名为'xyz'的连接字符串。但是,我使用EF向导使用Database First创建模型。它连接正常(在设计时) )并在名为EF的文件夹中创建了所有EDMX内容。

警告:我们的项目作为插件运行到另一个程序,它要求我们把这个语句放到Build Output Path ...... \ Bin \,我们把所有构建内容的4个目录放在目录下面项目

我已经尝试将app.config手动复制到上面显示的Bin目录后面的一个目录中。我把它放在上面的Bin目录中,无法获取项目来查找配置文件。

任何提示?

2 个答案:

答案 0 :(得分:1)

要使用Entity Framework,您的执行程序集需要在其配置文件中查找有关EF的信息。在WPF应用程序中,通常会App.config将其重命名为Projectname.exe.config,但在调试时,会使用Projectname.vshost.exe.config,您应该检查。

配置文件需要包含三个重要的事项才能运行实体框架。

<configuration>
    <configSections> <!-- 1.  a section "entityFramework" -->
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </configSections>


    <connectionStrings> <!-- 2. a connection string -->
        <add name="YourContext" connectionString="todo" providerName="System.Data.EntityClient" />
    </connectionStrings>

    <entityFramework> <!-- 3. entityFramework Tag -->
        <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>

使用向导时会生成所有这些部分。您只需将它们复制到正确的配置文件中即可。

编辑只是指出其他一些基础知识

在Application-Startup中只打开了一个 Config-File。那是<NameOfApp>.exe.config

构建应用程序 - 构建可执行项目时,内部包含的App.config将被复制到输出目录并重命名,如上所述。在使用某些其他组件的任何情况下,例如,一个库项目或其他什么,如果库项目的app.config中包含相关数据,它将不会自动使用。 这就是您必须执行上述步骤的原因。

OP的案例中,他的程序MyProgram.dll将被复制到另一个目录中,其他程序(让我们称之为Master.exe)将执行此程序集。这意味着,即使他还复制了MyProgram.dll.config,它也不会自动打开,因为在这种情况下运行的配置是Master.exe.config。如果OP想要使用某些配置,他需要将其复制到Master.exe.config这不是很干净,因为我希望这是一个完整的其他项目,因此,它们应该真正分开。 所以他需要手动执行一些代码,运行其插件的配置。

答案 1 :(得分:0)

此问题的根本原因是此程序的调试版本未在典型的调试文件夹root / bin / debug中运行。我们的团队已将代码放入项目文件中,以复制和执行程序(x86)文件夹中的内容,其中插件必须是主机解决方案才能找到它。

如果您遇到这种情况,此代码将告诉您程序集的执行位置:

Assembly.GetExecutingAssembly().CodeBase.  

一旦我把它作为调试语句,我知道在哪里寻找配置文件。

我最初错过了这个,因为项目文件中的复制语句在Build / Post Build区域中不易看到。您必须打开项目文件才能看到它们。