gpt4 book ai didi

sql - Entity Framework 可以在本地工作,但不能在 azure 上工作

转载 作者:行者123 更新时间:2023-12-04 21:58:53 26 4
gpt4 key购买 nike

我有一个在本地完美运行的网络项目。但是,当我更改 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 运行 - 失败!!

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

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

  • 在 Azure 管理控制台中,我转到网站设置并查看了“内置”到我的 Azure 网站的“连接字符串”设置,这是使用 DB 创建网站的副作用 -- 连接字符串“句柄” ' 是“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 找到。相反,EF 继续在 web.config 中查找真正的连接字符串以及所有正确的元数据。问题已解决。

关于sql - Entity Framework 可以在本地工作,但不能在 azure 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13840326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com