实体框架错误 - "EntityContainer名称必须是唯一的"

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是已定义"令人困惑.

Gui*_*ira 24

转到该bin文件夹并手动删除dll和pdb文件.

  • 这对我有用.我重命名了一个类库,旧的dll仍然在bin文件夹中. (4认同)

Zha*_*uid 15

在过去遇到这个问题时,我总是创建一个包含实体模型的第三个共享库 - 如果您决定添加新的表/列/方法,那么您知道不会出现名称冲突对于模型你只需要这样做一次等等.


小智 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)