Azure SQL Database本地EF运行正常,发布后报错求助
问题现象
- 本地环境下,使用Entity Framework Database/Model First连接Azure SQL Database运行正常
- 发布到服务器后触发异常,报错内容:
当前上下文以Code First模式运行,但代码是由Database First或Model First开发的EDMX文件生成的,无法正常工作。解决方法:请勿移除抛出此异常的代码;若使用Database First或Model First,请确保启动项目的app.config/web.config中包含Entity Framework连接字符串;若自行创建DbConnection,请确保是EntityConnection类型,并传入接受DbConnection的DbContext基类构造函数。
当前使用的连接字符串:
connectionString="metadata=res://*/dbEspesyalTea.csdl|res://*/dbEspesyalTea.ssdl|res://*/dbEspesyalTea.msl;provider=System.Data.SqlClient;provider connection string="data source=tcp:[hidden].database.windows.net,1433;initial catalog=dbET;persist security info=True;user id=[hidden];password= [hidden];MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient"
排查与修复步骤
确认发布后配置文件完整性
检查服务器上的web.config(Web项目)或app.config(桌面项目),确保完整保留上述Entity Framework连接字符串,未被发布工具默认替换。部分发布流程会自动覆盖连接串,需手动确认发布规则保留原EntityClient类型的配置。验证DbContext构造函数
确保DbContext类使用指定连接字符串名称的构造函数,避免直接传入SqlConnection(会强制触发Code First模式)。示例代码:public class dbEspesyalTeaEntities : DbContext { public dbEspesyalTeaEntities() : base("name=dbEspesyalTeaEntities") { } }检查配置转换规则
若使用Web.config转换(如Web.Release.config),确认转换逻辑未将EntityClient连接串修改为普通SqlClient连接串,必须保留metadata节点和providerName="System.Data.EntityClient"配置。确认EDMX文件发布状态
检查EDMX文件属性:将Build Action设为Embedded Resource,Copy to Output Directory设为Copy if newer,保证发布后元数据文件(csdl/ssdl/msl)能正确嵌入程序集。
内容的提问来源于stack exchange,提问作者bachira

