实体框架可以在本地工作,但不能在 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 上工作 的相关文章

  • 在 Azure 表存储中存储应用程序日志的策略

    我要确定一个在 Azure 表存储中存储日志信息的好策略 我有以下内容 分区键 日志的名称 RowKey 反转日期时间刻度 这里唯一的问题是分区可能会变得非常大 数百万个实体 并且大小会随着时间的推移而增加 但话虽这么说 正在执行的查询类型
  • 随着时间的推移累积(不重叠)——技术?

    我正在尝试找到一种更好的方法来制作水晶报告 其他人的 按组添加不重叠的时间 这显然是一个古老的问题 有没有一种技术可以得到 调整每条记录的 开始 结束 时间 以消除共同 重叠时间 亚组内 使用直接 SQL 尽管我发现我可以执行 CTE 假设
  • 在 plpgsql 函数中使用 quote_ident()

    我是创建 plpgsql 函数的新手 我需要一些有关在函数内部执行的动态命令上使用 quote ident 甚至 quote literal 的说明 希望有人能给我一个关于它们如何在函数内部工作的具体解释 TIA 这是一个例子 EXECUT
  • 在 Yii 的标准中如何获得计数 (*)

    我正在尝试构建一个具有以下内容的查询group by属性 我正在尝试得到id和count它一直告诉我count is invalid列名 我怎样才能得到count来自group by询问 工作有别名 伊伊 1 1 11 其他不及格 crit
  • Azure VM 上的 MongoDb 连接超时

    将我的 Azure Web 应用程序连接到 Azure VM 上托管的 MongoDb 时 我遇到一些超时问题 2015 12 19T15 57 47 330 0100 I NETWORK Socket recv errno 10060 A
  • 使用函数的 SQL 查询 - 如何获取列表的最大计数

    如何查询 MAXIMUM COUNT 交易次数 我的代码如下 SELECT customer id COUNT customer id FROM rental GROUP BY customer id HAVING MAX COUNT cu
  • Oracle REGEXP_INSTR() 和“a-z”字符范围与预期不匹配

    我想用REGEXP INSTR 在 oracle 数据库中检查小写 大写字符 我知道 upper and lower POSIX 字符类 但我选择了a z这给了我非常奇怪的结果 我不明白 有人可以解释一下吗 SELECT REGEXP IN
  • 如何将 SQL Server 中同一表中的一列插入到另一列中

    我需要将一列的数据插入到同一个表中的另一列中 谁能告诉我这个怎么写 Thanks UPDATE table SET col 2 col 1
  • 限制分页页数

    objConnect mysql connect localhost root or die mysql error objDB mysql select db Test strSQL SELECT FROM UserAddedRecord
  • 有没有办法以编程方式更改 cosmos db 表上的 TTL

    As the title describes I m trying to change the TTL of a cosmos db table I couldn t find anything in c powershell arm te
  • PostgreSQL 和锁定

    希望一些比我更聪明的 DBA 可以帮助我找到一个好的解决方案来完成我需要做的事情 为了便于讨论 我们假设我有一个名为 work 的表 其中包含一些列 其中一列表示给定客户端对该行工作的所有权 场景是 我将连接 2 个客户端并轮询表以查找要完
  • 我的用例可以合并到单个查询中而不影响性能吗?

    我主要着眼于改善表现查询的内容以及是否能够解决单一查询对于我的用例之一 解释如下 涉及到2张表 Table 1 EMPLOYEE column1 column2 email1 email2 column5 column6 Table 2 E
  • 无法使用 Git 部署从多项目解决方案部署正确的网站到 Azure

    我有一个解决方案 它有一个 mvc 网站 WebApplication1 该网站依赖于解决方案中的另一个项目 WebAppCore 源代码托管在 Visual Studio Online 上的 git 中 我配置了持续集成 一切都构建得很好
  • 连接 3 三张表

    我有这个图表应该可以解释我的情况 我需要一些关于连接 3 个表的帮助 我不知道如何做这种事情 因此 我可以通过执行以下操作来经历一段检索记录的 while 循环 img src alt Album AlbumID 使用内部联接 http w
  • 用户 AD 身份验证失败时如何导航到自定义访问被拒绝页面(具有 OpenIDConnect Azure AD 身份验证的 .net 3.1 core)

    我有一个 Net core 3 1 Web 应用程序 通过在 Azure 中设置应用服务注册并分配用户来实现 AD 身份验证 现在 当未经授权的用户尝试访问应用程序时 AD 身份验证会失败并转到 OPENIDConnect 异常页面 但我需
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • 使用“AND”表达式构建动态 SQL,而不混淆嵌套条件?

    总的来说 我对 php 和编码相当陌生 我有一系列条件需要测试它们是否已设置 它们是 option1 option2 option3 if isset option1 if isset option2 if isset option3 qu
  • 根据最大值连接表

    这是我正在谈论的内容的一个简化示例 Table students exam results id name id student id score date 1 Jim 1 1 73 8 1 09 2 Joe 2 1 67 9 2 09 3
  • MYSQL 按喜欢/不喜欢和受欢迎程度排序

    我有评论表 其中包括喜欢和不喜欢的内容 现在我在正确的顺序上遇到了问题 实际上 我的系统在顶部显示了最多点赞的评论 我正在 youtube 上寻找类似系统的东西 这意味着 100like 100dislikes 的评论的顺序高于 1 1 我
  • Entity Framework 6 多对多想要插入重复行

    不应该这么难 我准备放弃EF了 我的模型有周刊版本 每个版本可以有许多分类广告 每个分类可以出现在一个或多个版本中 我的模型 public class Classifieds Key DatabaseGenerated DatabaseGe

随机推荐