将 Entity Framework 部署到 Azure 时添加命名空间的连接字符串
Connection strings adding namespace when deploying Entity Framework to 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" />
迁移失败 运行 我认为是因为找不到数据库。
如果我手动创建 tables 并删除迁移 table 创建网站失败:建立与 [=35= 的连接时发生与网络相关或特定于实例的错误] 服务器。服务器未找到或无法访问。验证实例名称是否正确并且 SQL 服务器配置为允许远程连接。 (提供商:SQL 网络接口,错误:52 - 无法找到本地数据库运行时安装。
但是如果编辑 web.config 并从 WebsiteDBContext 连接字符串中删除 "Utils.Models." 而不是 WebsiteDBContext_DatabasePublish 它连接到数据库就可以了。
如何正确命名连接并迁移到 运行?已经试了好几次都没找到解决方法。
谢谢
您的上下文 class 名为 WebsiteDBContext
。按照惯例,您的 web.config 中会有一个名为 WebsiteDBContext
的连接字符串。当您通过此向导启用代码迁移时,该向导将创建一个名为 WebsiteDBContext_DatabasePublish
的第二个连接字符串,它将 仅用于 运行 您的代码首次迁移。
更新您的 DbContext,其中数据发布内容仍在 webconfig 中,但不,我不再收到异常。
public WebsiteDBContext():base("WebsiteDBContext", throwIfV1Schema: false) // throwIfV1Schema:false was added as the Identity V2 was causing an error in Azure
详情请参考issue。
终于解决了。
已发布的应用程序找不到名称为 "WebsiteDBContext" 的连接字符串,因为 VS 部署向导正在命名连接字符串 "Utils.Models.WebsiteDBContext",因此它正在回退到默认值EF 连接是 localDB:
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
当我停止在 DBContext 中显式命名数据库名称时:
public WebsiteDBContext() : base()
然后应用程序查找的连接名称是它找到的 "Utils.Models.WebsiteDBContext"。
因此,通过 VS 向导使用名为 DBContext 发布到 Azure 的效果不佳,因为在 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" />
迁移失败 运行 我认为是因为找不到数据库。
如果我手动创建 tables 并删除迁移 table 创建网站失败:建立与 [=35= 的连接时发生与网络相关或特定于实例的错误] 服务器。服务器未找到或无法访问。验证实例名称是否正确并且 SQL 服务器配置为允许远程连接。 (提供商:SQL 网络接口,错误:52 - 无法找到本地数据库运行时安装。
但是如果编辑 web.config 并从 WebsiteDBContext 连接字符串中删除 "Utils.Models." 而不是 WebsiteDBContext_DatabasePublish 它连接到数据库就可以了。
如何正确命名连接并迁移到 运行?已经试了好几次都没找到解决方法。
谢谢
您的上下文 class 名为 WebsiteDBContext
。按照惯例,您的 web.config 中会有一个名为 WebsiteDBContext
的连接字符串。当您通过此向导启用代码迁移时,该向导将创建一个名为 WebsiteDBContext_DatabasePublish
的第二个连接字符串,它将 仅用于 运行 您的代码首次迁移。
更新您的 DbContext,其中数据发布内容仍在 webconfig 中,但不,我不再收到异常。
public WebsiteDBContext():base("WebsiteDBContext", throwIfV1Schema: false) // throwIfV1Schema:false was added as the Identity V2 was causing an error in Azure
详情请参考issue。
终于解决了。
已发布的应用程序找不到名称为 "WebsiteDBContext" 的连接字符串,因为 VS 部署向导正在命名连接字符串 "Utils.Models.WebsiteDBContext",因此它正在回退到默认值EF 连接是 localDB:
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
当我停止在 DBContext 中显式命名数据库名称时:
public WebsiteDBContext() : base()
然后应用程序查找的连接名称是它找到的 "Utils.Models.WebsiteDBContext"。
因此,通过 VS 向导使用名为 DBContext 发布到 Azure 的效果不佳,因为在 Azure 上创建的连接字符串具有完整的命名空间。