EntityContainer名称必须是唯一的。已定义名为“实体”的EntityContainer

.net c# entity-framework exception-handling visual-studio

有一点背景:

我有一个DLL项目具有以下结构:

Rivworks.Model (project)  
  \Negotiation (folder)  
      Model.edmx (model from DB #1)  
  \NegotiationAutos (folder)  
      Model.edmx (model from DB #2)  

我已将连接字符串从此项目的app.config移动到web.config文件。它们不在 ConnectionString部分中。相反,我有一个静态类,它消耗部分web.config并将它们作为AppSettings公开给我的应用程序。[settingName]。

<FeedAutosEntities_connString>metadata=res://*/;provider=System.Data.SqlClient;provider connection string='Data Source=db4;Initial Catalog=RivFeeds;Persist Security Info=True;User ID=****;Password=&quot;****&quot;;MultipleActiveResultSets=True'</FeedAutosEntities_connString>
<RivWorkEntities_connString>metadata=res://*/NegotiationAutos.NegotiationAutos.csdl|res://*/NegotiationAutos.NegotiationAutos.ssdl|res://*/NegotiationAutos.NegotiationAutos.msl;provider=System.Data.SqlClient;provider connection string='Data Source=db2;Initial Catalog=RivFramework_Dev;Persist Security Info=True;User ID=****;Password=&quot;****&quot;;MultipleActiveResultSets=True'</RivWorkEntities_connString>

我有2个类,每个上下文一个,它们看起来像这样:

namespace RivWorks.Model
{
    public class RivWorksStore
    {
        private RivWorks.Model.Negotiation.Entities _dbNegotiation;

        public RivWorksStore(string connectionString, string metadata, string provider)
        {
            EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
            entityBuilder.ConnectionString = connectionString;
            entityBuilder.Metadata = "res://*/";    // metadata;
            //entityBuilder.Provider = provider;
            _dbNegotiation = new RivWorks.Model.Negotiation.Entities(entityBuilder.ConnectionString);
        }

        public RivWorks.Model.Negotiation.Entities NegotiationEntities()
        {
            return _dbNegotiation;
        }
    }
}

namespace RivWorks.Model
{
    public class FeedStoreReadOnly
    {
        private RivWorks.Model.NegotiationAutos.Entities _dbFeed;

        public FeedStoreReadOnly(string connectionString, string metadata, string provider)
        {
            EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
            entityBuilder.ConnectionString = connectionString;
            entityBuilder.Metadata = "res://*/";    // metadata;
            //entityBuilder.Provider = provider;
            _dbFeed = new RivWorks.Model.NegotiationAutos.Entities(entityBuilder.ConnectionString);
        }

        public RivWorks.Model.NegotiationAutos.Entities ReadOnlyEntities()
        {
            return _dbFeed;
        }
    }
}

您将注意到MetaData正在被重写为简短版本。

当我在每个类中注释掉该行时,我收到此错误:

无法加载指定的元数据资源。

当我在每个班级中留下该行时,我收到此错误:

指定的架构无效。错误:

Negotiation.Model.csdl(3,4):错误0019:EntityContainer名称必须是唯一的。已定义名为“实体”的EntityContainer。

我知道这很简单,很明显。欢迎任何建议......

一般承认的答案

您的两个EDMX文件可能具有相同的实体容器名称。您需要更改(至少)其中一个。

在GUI设计器中,打开模型浏览器。查找名为“EntityContainer:Entities”的节点。点击它。在“属性”中,将Name更改为其他Name 。保存并重建。


热门答案

劫持此问题,因为它是错误消息的最高Google结果。

如果其他人在仅使用单个模型/上下文时遇到此问题:我曾遇到过这个问题,因为包含模型/上下文的程序集已重命名,并且具有先前名称的副本仍保留在应用程序的bin目录中。解决方案是删除旧的程序集文件。




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因