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

San*_*anj 45 connection-string database-migration entity-framework-4.3

我只是安装EF 4.3并试图通过迁移升级我的项目.但是我遇到了尝试add-migration initial通过Package Manager控制台执行我的项目的问题.

它现在抛出任何异常 No connection string named 'MyApplicationEntities' could be found in the application config file.

现在我的配置拥有一切

<connectionStrings>
<add name="MyApplicationEntities" 
     connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=localhost;initial catalog=MyApplicationEntitiesDB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" 
     providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

我不确定是什么问题是EF 4.3中的一个错误或者我做得不对.

我认为这篇文章解决了这个问题但并不完全.

任何人都有答案.

感谢Sanj.

San*_*anj 103

啊,意外地想出来了.

我不得不删除

public MasterEntities()
    : base("name=MyApplicationEntities")
    //      ^^^^^
{
}
Run Code Online (Sandbox Code Playgroud)

public MasterEntities()
    : base("MyApplicationEntities")
{
}
Run Code Online (Sandbox Code Playgroud)

EF 4.3不喜欢调用连接字符串 name=xxxxx

  • 这可能不是任何人都在寻找的解决方案 - 以这种方式使用"name ="就是你如何表明你在做数据库优先,而删除它会发出代码优先信号并且很有可能抛出UnintentionalCodeFirstException. (9认同)
  • 这不会像你想的那样奏效.如果删除"Name ="部分,它将使用该名称创建数据库:) (8认同)
  • 在EF 6.0中也得到了帮助 - 没有找到更好的东西. (8认同)
  • EF 5.0 - 同样的问题 (5认同)
  • 你的web.config或app.config中有一个带有相应名称的连接字符串吗?这是我最初犯的一个常见错误,因为我的Context Object位于不同的DLL中,连接信息不会自动复制到主项目中. (4认同)
  • 请不要申请此更改.这不是一个正确的解决方案.我提到了一个"无意的代码首次异常",就像bwerks提到的那样. (2认同)

Bil*_*ill 38

Sanj指出的解决方案是,您需要将数据库项目的App.config中的连接字符串复制到Web项目的web.config中.我不确定为什么上面的答案被标记为正确.我正在添加这个作为答案而不是评论,所以未来的读者会发现这一点.


Phi*_*hil 28

我有同样的错误,但我已经有一个web.config文件,正确的连接字符串名称和正确声明的DbContext.但是,我注意到当我使用-Verbose运行add-migration时,它将"启动项目"称为与包含我的上下文的项目不同的项目.所以我改变了启动项目,重新运行了add-migration,一切正常!


小智 8

确保您的statup项目配置文件具有连接字符串.此链接可能对您有所帮助.


小智 6

我也遇到了这个问题,并解决了这个问题

  1. 选择正确的StartUp project.
  2. 在Package Manager Console上重新运行该命令.

事情按预期进行.