在将实体框架部署到Azure时添加名称空间的连接字符串

问题描述 投票:0回答:2

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

我正在使用数据库命名的默认行为而不是指定连接字符串,因为我从多台具有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-framework azure deployment entity-framework-6
2个回答
0
投票

您的上下文类名为WebsiteDBContext。按照惯例,您的web.config中将有一个名为WebsiteDBContext的连接字符串。通过此向导启用代码迁移时,向导将创建名为WebsiteDBContext_DatabasePublish的第二个连接字符串,该字符串仅用于运行代码首次迁移。

更新您的DbContext,数据发布的东西仍在Web配置中,但不是我不再获得异常。

    public WebsiteDBContext():base("WebsiteDBContext", throwIfV1Schema: false) // throwIfV1Schema:false was added as the Identity V2 was causing an error in Azure

有关详细信息,请参阅此issue


0
投票

最终解决了它。

由于VS部署向导正在命名连接字符串“Utils.Models.WebsiteDBContext”,因此发布的应用程序无法找到具有其正在查找“WebsiteDBContext”的名称的连接字符串,因此它回退到默认的EF连接,即localDB :

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

当我停止在DBContext中显式命名DB名称时:

public WebsiteDBContext() : base() 

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

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

© www.soinside.com 2019 - 2024. All rights reserved.