entity-framework - 将实体框架部署到 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 它连接到数据库确定。
如何正确命名连接并运行迁移?已努力但未能找到解决方案。
谢谢
解决方案
最终解决了。
已发布的应用程序找不到名称为“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 上创建的连接字符串具有完整的命名空间。
推荐阅读
- javascript - 从 React 中的渲染组件中提取元素数组
- python - 一个基类的方法调用同一个基类中定义的另一个方法,最终可能会调用一个派生类的方法来覆盖它
- sql - Knex/反对关系“一对多”
- python - 3D 图和 3D 直方图子图
- typescript - Lodash:如何按对象数组分组?
- python - 如何在 Tkinter 中随机定位标签中的文本
- angular - 从 Web API 保存/加载时是否需要在组件数据和表单数据之间手动复制?
- javascript - WebGL:为什么我得到的是细长的矩形而不是正方形?
- windows - 无法从 Mac 打开 virt-manager
- google-chrome - 如何关闭密码检查