在应用程序配置文件中找不到名为"MyEntities"的连接字符串

jjc*_*c99 240 c# entity-framework asp.net-mvc-4

我正在使用实体框架和ASP.NET MVC 4来构建应用程序

我的解决方案分为两个项目;

  • 包含我的数据模型(.edmx)文件和一些自定义接口的类库
  • 引用上面类库的'容器'MVC项目

我的问题是,当我尝试使用' MyEntites'DbContext时,我收到以下错误:

在应用程序配置文件中找不到名为"MyEntities"的连接字符串.

我想这个问题与连接字符串位于类库的app.config而不是MVC项目中有关.

有没有人有什么建议?

Jer*_*rry 303

尝试将连接字符串复制到MVC项目中的.config文件.

  • 工作完美但很想知道为什么引用的项目没有使用自己的配置文件来获取连接字符串. (61认同)
  • 在NuGet COnsole的上下文中运行时,启用 - 迁移命令会查看启动项目配置文件,而不一定是您认为它将在其中的项目.只需使用您希望成为启动的app.config设置项目项目.(可选)将连接字符串存储在一个配置文件中,然后通过<connectionString configSource ="../ ProjectDir/SharedConnections.config"/>在其他项目中引用它们. (24认同)
  • @Alexander,框架加载并使用配置文件执行程序集.在这种情况下,它是Web项目.类库通常没有自己的配置文件. (22认同)
  • @Alexander老问题但是,我也想知道原因. (7认同)
  • 我得到了这个确切的错误消息,但我的.config文件 - 在正确的项目中 - 确实列出了正确的连接字符串.但是,我使用的是转换,连接字符串当然没有在转换后的.config文件中引用.如果您正在使用配置文件转换,那么这是需要注意的事项. (3认同)

Ore*_*ren 141

你是对的,这是因为类库(.edmx文件所在的位置)不是你的启动/主项目.

您需要将连接字符串复制到主项目配置文件.

如果您的启动/主项目没有配置文件(就像在我的控制台应用程序案例中那样)只需添加一个(启动项目 - 添加新项目 - >应用程序配置文件).

可以在此处找到更多相关信息: MetadataException:无法加载指定的元数据资源

  • 对此的关键答案是类库(.edmx文件所在的位置)不是您的STARTUP项目.我意识到我的启动项目没有设置到我的web.config中的项目.它是一个具有不同app.config的控制台应用程序.因此,如果您要将控制台应用程序添加到Web解决方案中,请确保在运行update-database时您的Web项目是启动项目! (8认同)
  • 我的启动项目被错误地更改了。那是关键。您的回答确实有帮助! (2认同)

CMS*_*CMS 93

确保你的项目(使用DbContext)作为启动

在项目上右键单击并选择

要么

添加到app.config(或web.config)中设置为启动连接字符串的项目

要么

像这样调用命令

Update-Database -Script -ProjectName '<project name>' -StartupProjectName '<project name>' -ConnectionString 'data source=.;initial catalog=<db name>;integrated security=True;MultipleActiveResultSets=True' -ConnectionProviderName 'System.Data.SqlClient'

然后再试一次

  • 它实际上是项目包含应该设置为启动项目的连接字符串,通常它不是你的DbContext文件所在的项目 (2认同)
  • 这救了我的命.即使在包管理器中,我将默认项目设置为设置了上下文的项目,但它仍然没有覆盖. (2认同)

Ser*_*gan 29

你可以把连接字符串传递给EntityFramework你的生活:

public partial class UtilityContext : DbContext
{
    static UtilityContext()
    {
        Database.SetInitializer<UtilityContext>(null);
    }

    public UtilityContext()
        : base("Data Source=SERVER;Initial Catalog=DATABASE;Persist Security Info=True;User ID=USERNAME;Password=PASSWORD;MultipleActiveResultSets=True")
    {
    }

    // DbSet, OnModelCreating, etc...
}
Run Code Online (Sandbox Code Playgroud)

  • 但如何设置提供商名称? (3认同)

pod*_*ska 9

正如你猜测的那样,连接字符串位于类库的app.config中.

将类app.config中的条目复制到容器app.configweb.config文件中


W92*_*W92 8

如果您在解决方案中有多个项目,那么setUp项目已经启动,您可以获得真实的App.config.


A-S*_*ani 7

  1. 添加 App.Config 文件
  2. 将项目设置为启动项目。
  3. 确保在entityFramework部分之后添加连接字符串:

    <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>
       <!-- your connection string goes here, after configSection -->
    </connectionString>
    
    Run Code Online (Sandbox Code Playgroud)


Rav*_*and 6

将连接字符串复制到设置为"设置为启动项目"的项目中的app.config或web.config文件,如果在数据层中使用实体框架,请在主项目中安装实体框架nuget.


小智 5

如果启动项目也发生改变的一个,它具备连接字符串.

  1. 右键单击解决方案 - 单击属性
  2. 在Common Properties下,选择startup project
  3. 在右侧窗格中选择具有连接字符串的项目(在大多数情况下,它将是MVC项目 - 启动解决方案的项目)


小智 5

这是因为您的上下文类是从 DbContext 继承的。我猜你的演员是这样的:

public MyEntities()
    : base("name=MyEntities")
Run Code Online (Sandbox Code Playgroud)

name=...应该更改为您的连接字符串的名称