实体框架(数据库优先)无法查找连接字符串

时间:2013-04-01 18:51:41

标签: c# asp.net-mvc entity-framework web-config connection-string

我有两个独立的项目,一个用于数据交互,另一个用于WebUI。

WebUI项目根目录中的web.config具有以下连接字符串:

<add name="MySiteEntities" connectionString="metadata=res://*/MySite.csdl|res://*/MySite.ssdl|res://*/MySite.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=tcp:**********.database.windows.net,****;initial catalog=MySite;user id=username@**********;password=*******;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

EDMX(数据库优先)生成的dbcontext具有以下内容:

public partial class MySiteEntities : DbContext
{
    public MySiteEntities()
        : base("name=MySiteEntities")
    {
    }
...

当我在本地运行站点时,实体框架找到连接字符串并成功连接到数据库。

但是,当我发布时,实体框架似乎无法找到连接字符串而是抛出UnintentionalCodeFirstException

我到底错在了什么?

2 个答案:

答案 0 :(得分:0)

调试的第一步是确保您了解抛出的异常。根据{{​​3}},UnintentionalCodeFirstException是:

  

从中生成上下文时引发的异常   DbContext模板在Database First或Model First模式下,然后是   用于Code First模式。

这并不是非常有用,但它确实能够解决您的问题:使用Database First或Model First生成您的上下文,但由于某种原因,上下文认为它应该是Code First。

基于此的一点点搜索使我获得了MSDN docs,它可以很好地解释可能的原因。我建议你给它一个阅读,看看是否有任何东西为你弹出。

我最好的猜测,因为这在本地工作但不是远程的,因为与你的连接字符串相对应的EDMX映射无论出于何种原因都没有跳转。如果你正在使用源代码控制,也许它没有得到提交。如果没有这种映射,EF将导致Code First策略,这将导致此异常。

答案 1 :(得分:0)

我认为您的连接字符串中的数据源值不需要“tcp:”。我在我的azure应用程序的配置中没有这个,它工作正常。