ENX*_*ENX 16 .net entity-framework exception-handling visual-studio
我们有一个包含两个项目的解决方案 - 控制台应用程序项目和Web应用程序项目.其中每个都具有相同的模式,但用于访问同一数据库的名称不同的.edmx文件.
控制台应用程序在托管Web应用程序的同一服务器上作为计划任务运行.Web应用程序包含对控制台应用程序的引用,因为Web应用程序中的某些操作会导致调用控制台应用程序中的方法.这种组合已在我们的暂存环境中成功运行了好几个月.
在实时发布时,我们每天至少会看到以下错误消息:
指定的架构无效.错误:
ProjectName.csdl(3,4):错误0019:EntityContainer名称必须是唯一的.已定义名为"ProjectEntities"的EntityContainer.ProjectName.csdl(63,4):错误0019:架构中的每个类型名称必须是唯一的.已定义类型名称"ProjectModel.DataSource".ProjectName.csdl(75,4):错误0019:架构中的每个类型名称必须是唯一的.已定义类型名称"ProjectModel.Error".
这将继续,列出我们架构中的所有类型名称.
可以通过回收应用程序池或重新启动IIS来修复此错误.
请注意,在Web应用程序运行一段时间之后才会发生错误 - 在编译或第一次访问应用程序时不会发生错误.
我的初步理论是两个实体容器之间存在冲突,因为Web应用程序引用了控制台应用程序,但它们有不同的名称,这使得错误"EntityContainer名称必须是唯一的.名为'ProjectEntities'的EntityContainer是已定义"令人困惑.
小智 8
从此更改webconfig文件实体连接字符串条目
metadata=res://*/App_Code.AAA.csdl|res://*/App_Code.AAA.ssdl|res://*/App_Code.AAA.msl;provider=System.Data.SqlClient;provider connection string="data source=XXX;initial catalog=XXX;user id=XXX;password=XXX;multipleactiveresultsets=True;App=EntityFramework""
providerName="System.Data.EntityClient
Run Code Online (Sandbox Code Playgroud)
至
metadata=res://MyProject/App_Code.AAA.csdl|res://MyProject/App_Code.AAA.ssdl|res://MyProject/App_Code.AAA.msl;provider=System.Data.SqlClient;provider connection string="data source=XXX;initial catalog=XXX;user id=XXX;password=XXX;multipleactiveresultsets=True;App=EntityFramework""
providerName="System.Data.EntityClient
Run Code Online (Sandbox Code Playgroud)