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目錄中。解決方案是刪除舊的程序集文件。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因