实体框架可以在本地工作,但不能在 azure 上工作

2024-04-30

我有一个在本地完美运行的网络项目。 但是,当我更改 Azure 上发布的网站中的连接字符串以连接到 SQL Azure 上的数据库时,它将开始出现此错误。

System.Data.Entity.Infrastructure.UnintentionalCodeFirstException: Code generated using the T4 templates for Database First and Model First development may not work correctly if used in Code First mode. To continue using Database First or Model First ensure that the Entity Framework connection string is specified in the config file of executing application. To use these classes, that were generated from Database First or Model First, with Code First add any additional configuration using attributes or the DbModelBuilder API and then remove the code that throws this exception.
   at MyClass.OnModelCreating(DbModelBuilder modelBuilder) in c:\a\src\MyProject\Model.Context.cs:line 25
   at System.Data.Entity.Internal.LazyInternalContext.CreateModelBuilder()
   at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
   at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
   at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
   at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
   at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
   at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()
   at System.Linq.Queryable.Select[TSource,TResult](IQueryable`1 source, Expression`1 selector)

我的配置有:

<connectionStrings>
    <add name="MyDBEntities" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Server=tcp:[Removed].database.windows.net,1433;Database=MyDB;User ID=[Removed];Password=[Removed];Trusted_Connection=False;Encrypt=True;Connection Timeout=30;&quot;" providerName="System.Data.EntityClient" /> 
    <add name="MyDB" connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;Server=tcp:[Removed].database.windows.net,1433;Database=MyDB;User ID=[Removed];Password=[Removed];Trusted_Connection=False;Encrypt=True;Connection Timeout=30;&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

我使用该连接字符串在本地进行了单元测试,它可以在连接到 SQL Azure 数据库的本地计算机上运行。 任何帮助表示赞赏。


我今天遇到了这个问题;这是我第一次部署到 Azure。我一直在拔头发,但我已经没有剩下的了。我终于弄清楚了,这可能与原始海报所遇到的问题相同。

就像原始海报一样,我在这些配置中进行了测试:

  • 从 Visual Studio 针对本地数据库运行 WCF Web 应用程序——成功
  • 将 WCF Web 应用程序从 Visual Studio 部署到本地 IIS,针对本地数据库运行 - 成功
  • 从 Visual Studio 针对 Azure SQL DB 运行 WCF Web 应用程序 — 成功
  • 通过 Visual Studio 将 WCF 应用程序部署到 Azure,针对 Azure SQL DB 运行 - 失败!

读完另一篇文章后(代码优先与数据库优先 https://stackoverflow.com/questions/8618342/code-first-vs-database-first)我得到了提示。该文章表示,如果“连接字符串具有元数据,EF 认为它是模型优先或数据库优先”,但如果它是“普通连接字符串,EF 认为它是代码优先”。我浏览了已部署的 Azure 网站的 web.config,并确认连接字符串具有对模型优先元数据的正确引用。那么问题出在哪里呢???

我想也许Azure网站没有读取web.config的连接字符串。回想一下我如何创建 Azure 网站,我记得我为 Azure SQL DB 指定了一个别名,其名称与 web.config 中连接字符串的“标签”完全相同!澄清:

  • 在Azure管理控制台中,我转到网站设置并查看了“烘焙”到我的Azure网站的“连接字符串”设置,这是创建带有数据库的网站的副作用——连接字符串“句柄”是“ SsnCustInfoModelContainer”--我错误地为连接指定了与连接字符串的 web.config“句柄”相同的“句柄”/“别名”,认为这会有所帮助。相反,当 EF 查找连接字符串时,它找到的是这个“别名”句柄,它是一个不包含元数据的“普通”SQL 连接字符串。这个“别名”掩盖了 web.config 中指定的真实连接字符串。

所以我毁掉了我的 Azure SQL DB 和我的 Azure 网站。然后,我重新创建了 Azure 网站,但这次我要求提供“SsnCustInfoModelContainer_Proto”的连接字符串“别名”,以连接到关联的 Azure SQL Server。从本地 SQL Server Management Studio 初始化 Azure SQL DB 后,我再次将 WCF Web 应用程序部署到 Azure 网站(当然,我必须下载新的部署配置文件才能执行此操作),我再次尝试了该应用程序。这次成功了——“别名”“SsnCustInfoModelContainer_Proto”与 EF 不冲突且未找到。相反,EF 继续在 web.config 中查找真正的连接字符串以及所有正确的元数据。问题解决了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架可以在本地工作,但不能在 azure 上工作 的相关文章

  • Python SQLite3 SQL注入漏洞代码

    我知道下面的代码片段由于 format 的原因很容易受到 SQL 注入的攻击 但我不知道为什么 有谁明白为什么这段代码容易受到攻击以及我从哪里开始修复它 我知道这些代码片段使输入字段保持打开状态 以便通过 SQL 注入执行其他恶意命令 但不
  • 为什么我们不能有多个主键?

    我知道表中不能有超过 1 个主键 但技术原因是什么 直接拉取自SO https stackoverflow com questions 217945 can i have multiple primary keys in a single
  • 从多个表中选择 - 一对多关系

    我有这样的表 表产品 身份证 姓名 表格图像 产品 ID 网址 订单号 表价 产品 ID 组合 货币 价格 表数量 产品 ID 组合 数量 表 Product 与其他表是一对多关系 我需要查询表并得到类似这样的结果 伪数组 ProductI
  • 按小时拆分日期/时间数据并将日期/时间范围展开为行

    我正在尝试使用 SQL Server 将一系列日期 时间数据扩展为多行 例如 我的数据看起来像 Date StartTime EndTime EmployeeID ShiftType 10 1 2019 8 30 00AM 4 57 00P
  • 仅当变量不为空时 SQL 添加过滤器

    您好 我有疑问如下 SELECT route id ROUTE ID FROM route master NOLOCK WHERE route ou 2 AND route query l s query AND lang id 1 这里
  • Azure Key Vault - 添加部署槽的访问策略

    我有一个有 2 个插槽的应用程序 我已将连接字符串存储在密钥保管库中 我已在应用程序和 2 个插槽上启用 MSI 此外 在保管库的访问策略中 我添加了应用程序 生产槽 但是我无法将插槽添加到访问策略中 例如 我的应用程序的名称是 XYZ20
  • 删除 Azure 服务总线中的死主题

    我试图在这个问题上做足功课 但我所做的任何搜索都没有让我更接近答案 最近的命中是检测并删除 Azure 服务总线上的孤立队列 主题或订阅 https stackoverflow com questions 12334838 detect a
  • 使用绑定和空值命中 Oracle 索引的最佳查询

    我有一个表 该表在多个列上有一个索引 其中许多列可以为空 CREATE UNIQUE INDEX UX MYTABLE A B C D E ON MYTABLE A B C D E 现在 我在 C 代码中尝试检查该表并精确命中索引 对于每个
  • 显示过去 7 天 PHP 的结果

    我想做的是显示过去 30 天的文章 但我现有的代码不断给我一个 mysql fetch assoc 错误 然后追溯到我的查询 这是代码 sql mysql query SELECT FROM table WHERE DATE datetim
  • 如何正确设置 Azure DevOps 和 GitHub 之间的双向同步

    我想通过执行以下操作在 Azure DevOps 和 GitHub 之间创建双向同步 使用 CI 触发器创建 Azure DevOps 管道 将更改从 Azure DevOps 存储库推送到 GitHub 中的分支 创建第二个管道 用于侦听
  • 获取查询的行号

    我有一个查询将返回一行 当表排序时 有什么方法可以找到我正在查询的行的行索引吗 我试过了rowid但当我期待第 7 行时却得到了 582 Eg CategoryID Name I9GDS720K4 CatA LPQTOR25XR CatB
  • 如何打印Oracle中过程的定义?

    oracle中有没有办法查看过程的结构是什么 我正在尝试记录并运行程序 并希望将实际的程序结构存储在我的日志中 您可以查询ALL SOURCE table SELECT text FROM all source WHERE owner lt
  • SQL Server 查询结果集的大小

    SQL Server 中是否有确定结果集中 Mgmt Studio 查询中返回的数据大小 以 MEGS 为单位 您可以打开客户端统计信息 查询菜单 包括客户端统计信息 它给出执行查询时从服务器返回的字节数
  • 将包含特殊字符的标签发送到 Azure 通知中心

    我们想在 iPad 应用程序中使用 Azure 通知中心 但遇到了问题 确定谁收到推送消息的标签是电子邮件地址 如果它仅包含普通字符 则可以正常工作 但当我们尝试发送如下所示的标签时 它不起作用 电子邮件受保护 cdn cgi l emai
  • SQL Server 转换选择一列并将其转换为字符串

    是否可以编写一条从表中选择列并将结果转换为字符串的语句 理想情况下 我希望有逗号分隔的值 例如 假设 SELECT 语句看起来像这样 SELECT column FROM table WHERE column lt 10 结果是一列包含值的
  • 如何在 Redis 缓存中存储机器人状态

    虽然有一些文章描述了如何在 Redis 缓存中存储机器人状态 但这是推荐的方法吗 https ankitbko github io 2016 10 Microsoft Bot Framework Use Redis to store con
  • 如何通过循环变量在 dbt 中多次运行 SQL 模型?

    我有一个 dbt 模型 测试模型 接受地理变量 zip state region 在配置中 我想通过循环变量来运行模型三次 每次使用不同的变量运行它 问题是 我有一个如下所示的宏 它将变量附加到输出表名称的末尾 即运行测试模型 with z
  • 在存储过程结束时显式删除本地临时表有什么好处?

    考虑以下伪 T SQL 代码 由存储过程执行 CREATE TABLE localTable
  • 如何将 tfvc 迁移到 Git(包括历史记录)

    我们计划从 tfvc 迁移到 Git 版本控制 我们有一些 GB 的代码和数千个变更集 我阅读了一些文章并浏览了 Microsoft 文档 发现了 2 个选项 提示迁移 我可以在其中使用 Azure Devops 内置工具 导入存储库 它有
  • SQL:查找每个跑步者跑步之间的平均天数

    因此 如果我们给出下表 runner ran Carol 2011 02 01 Alice 2011 02 01 Bob 2011 02 01 Carol 2011 02 02 Bob 2011 02 02 Bob 2011 02 03 B

随机推荐