实体框架(数据库优先)找不到连接字符串

本文关键字:找不到 连接 字符串 框架 数据库 实体 | 更新日期: 2023-09-27 18:07:00

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

网络。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 .

我到底做错了什么?

实体框架(数据库优先)找不到连接字符串

调试的第一步是确保您理解正在抛出的异常。根据MSDN文档,UnintentionalCodeFirstException是:

对象生成上下文时引发的异常数据库优先或模型优先模式下的DbContext模板,然后

这不是非常有用,但它确实提示你发生了什么:你使用数据库优先或模型优先生成上下文,但现在出于某种原因,上下文认为它应该是代码优先。

在此基础上进行了一些搜索,我发现:不要错误地使用Code First,它可以很好地解释可能的原因。我建议你读一读,看看有没有什么吸引你的。

我最好的猜测是,由于这在本地而不是远程工作,与您的连接字符串对应的EDMX映射由于某种原因没有进行跳转。如果您使用的是源代码管理,那么它可能没有被提交。如果没有这种映射,EF将导致代码优先策略,这将导致此异常。

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