Azure 网站部署抛出.在 DataBaseFirst 和 CodeFirst 之间产生误导
本文关键字:之间 CodeFirst DataBaseFirst 部署 网站 Azure | 更新日期: 2023-09-27 17:57:05
我在尝试在 Azure 上部署 MVC 网站时遇到此"可怕"错误消息:
使用数据库优先和模型的 T4 模板生成的代码 如果在代码优先模式下使用,首次开发可能无法正常工作。 若要继续使用"数据库优先"或"模型优先",请确保实体 框架连接字符串在 的配置文件中指定 正在执行应用程序。使用这些类,这些类是从 数据库优先或模型优先,使用代码优先添加任何其他 使用属性或数据库模型构建器 API 进行配置,然后 删除引发此异常的代码。
数据库第一个工作流是从头开始使用的(添加 ADO.Net 实体数据模型元素,并随后连接到Azure SQL Server DB)。所以我不明白为什么它困扰着我代码优先。将 EF 6.0 与 T4 模板配合使用。生成的 DbContext 如下所示:
public partial class MyAppEntities : DbContext
{
public MyAppEntities()
: base("name=MyAppEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<AType> AType { get; set; }
public virtual DbSet<BType> BType { get; set; }
// etc.
}
连接字符串如下所示。在 DAL 项目和启动项目 Web 配置中复制:
<add name="MyAppEntities" connectionString="metadata=res://*/MyAppModel.csdl|res://*/MyAppModel.ssdl|res://*/MyAppModel.msl;provider=System.Data.SqlClient;provider connection string="data source=ndkkyxvogj.database.windows.net;initial catalog=DbName;persist security info=True;user id=myuserid;password=Pa$$word;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
应用程序在本地计算机上运行没有任何问题。
在 Azure 上部署过程请执行以下步骤。
在 Azure 上创建(自定义创建)网站并提供数据库凭据
从 Azure 仪表板下载发布配置文件
在 VS 中,单击从启动项目发布并设置以下参数:
- ->配置文件:导入下载的配置文件
- -> 连接:连接设置良好并验证
->设置 :完全不确定这里等待什么!!我尝试了两种连接设置:使用建议的连接字符串和 EDMX 连接字符串。喜欢这个:
metadata=res:///MyAppModel.csdl|res:///MyAppModel.ssdl|res://*/MyAppModel.msl;provider=System.Data.SqlClient;provider connection string="data source=ndkkyxvogj.database.windows.net;initial catalog=MyDb;persist security info=True;user id=databaseuser;password=Pa$$word;MultipleActiveResultSets=True;App=EntityFramework"
尝试评论 OnModelCreateating()。没用。还试图评论抛出 UnintentionalCodeFirstException()。也没用。
尽管对其他SO问答进行了研究,但无法找到任何可靠的解决方案。任何帮助将不胜感激。
知道了...
实际上,落在那篇帖子和那篇帖子上,似乎在Azure Sql Server和Azure网站中给出相同的连接字符串名称之间具有误导性。
它与代码优先/模型优先或数据库优先之间的任何糟糕的 EF 实现无关......
所以我在 Web 应用配置、上下文类构造函数和 azure 网站连接字符串名称参数中为连接字符串名称提供了一个新的名称......它奏效了。
弄清楚这一点真的很痛苦...