首页 > 解决方案 > 将实体框架部署到 Azure 时添加命名空间的连接字符串

问题描述

我正在使用 VS Studio 发布选项将站点部署到使用 EF6 的 Azure。

我使用数据库命名的默认行为,而不是指定连接字符串,因为我从混合了 localDB 或 SQL Express 的多台机器进行开发:

public WebsiteDBContext() : base("WebsiteDBContext")

EF 代码都在网站的单独项目中,因为它用于共享同一数据库的多个网站。

当我发布到 Azure 时,添加到 web.config 的连接字符串包括 DBContext 代码所在项目的命名空间:

<add name="Utils.Models.WebsiteDBContext" connectionString="Data Source=****.database.windows.net;Initial Catalog=MyDatabase;Persist Security Info=True;User ID=****;Password=****" providerName="System.Data.SqlClient" />
<add name="DefaultConnection" connectionString="Data Source=tcp:****.database.windows.net,1433;Initial Catalog=CreweAllen;User ID=****;Password=****" providerName="System.Data.SqlClient" />
<add name="Utils.Models.WebsiteDBContext_DatabasePublish" connectionString="Data Source=****.database.windows.net;Initial Catalog=MyDatabase;Persist Security Info=True;User ID=****;Password=****" providerName="System.Data.SqlClient" />

我认为迁移无法运行,因为它找不到数据库。

如果我手动创建表并删除迁移表创建,则网站将失败并显示:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:SQL 网络接口,错误:52 - 无法找到本地数据库运行时安装。

但如果编辑 web.config 并删除“Utils.Models”。从 WebsiteDBContext 连接字符串但不是从 WebsiteDBContext_DatabasePublish 它连接到数据库确定。

如何正确命名连接并运行迁移?已努力但未能找到解决方案。

谢谢

标签: entity-frameworkazuredeploymententity-framework-6

解决方案


最终解决了。

已发布的应用程序找不到名称为“WebsiteDBContext”的连接字符串,因为 VS 部署向导将连接字符串命名为“Utils.Models.WebsiteDBContext”,因此它回退到默认的 EF 连接,即 localDB :

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">

当我停止在 DBContext 中明确命名数据库名称时:

public WebsiteDBContext() : base() 

然后应用程序查找的连接名称是它找到的“Utils.Models.WebsiteDBContext”。

因此,不能通过名为 DBContext 的 VS 向导发布到 Azure,因为在 Azure 上创建的连接字符串具有完整的命名空间。


推荐阅读