我有两个独立的项目,一个用于数据交互,另一个用于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="data source=tcp:**********.database.windows.net,****;initial catalog=MySite;user id=username@**********;password=*******;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
EDMX(数据库优先)生成的dbcontext具有以下内容:
public partial class MySiteEntities : DbContext
{
public MySiteEntities()
: base("name=MySiteEntities")
{
}
...
当我在本地运行站点时,实体框架找到连接字符串并成功连接到数据库。
但是,当我发布时,实体框架似乎无法找到连接字符串而是抛出UnintentionalCodeFirstException
。
我到底错在了什么?
答案 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应用程序的配置中没有这个,它工作正常。