Имя EntityContainer должно быть уникальным. EntityContainer с именем 'Entities' уже определен - PullRequest
38 голосов
/ 14 января 2010

Для небольшого фона:

У меня есть проект 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.

<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;
        }
    }
}

Вы заметите, что метаданные переписываются в короткую версию.

Когда я закомментирую эту строку в каждом классе, я получаю эту ошибку:

Невозможно загрузить указанный ресурс метаданных.

Когда я оставляю эту строку в каждом классе, я получаю эту ошибку:

Указанная схема недействительна. Ошибки:

Negotiation.Model.csdl (3,4): ошибка 0019: имя EntityContainer должно быть уникальным. EntityContainer с именем 'Entities' уже определен.

Я знаю, что это что-то простое, что-то очевидное. Любые предложения приветствуются ...

Ответы [ 12 ]

0 голосов
/ 22 апреля 2016

Другая причина этой проблемы - добавление модели в любой проект решения и изменение проекта модели.

--PROJECT A --> MODEL.EDMX

--- WEB CONFIG -->Entity Connection

--PROJECT B

--- WEB CONFIG -->Entity Connection

Позже я думаю, что эта структура плохая и проект Change.

--PROJECT A
using PROJECT.C;
WEB.CONFIG - USE PROJECT C APP.CONFIG CONNECTIONSTRING 

--PROJECT B
using PROJECT.C;
WEB.CONFIG - USE PROJECT C APP.CONFIG CONNECTIONSTRING 

--PROJECT C  (CLASS LIBRARY) --> MODEL.EDMX 
--- APP.CONFIG -->Entity Connection

Все было хорошо, но я получаю ошибку. Сведения об ошибке: имя EntityContainer должно быть уникальным. Контейнер EntityContainer с именем 'Entities' уже определен

Потому что я забыл изменить файлы Web.Config.

СТАРЫЙ ВЕБ-КОНФИГ

    <add name="donatelloEntities" connectionString="metadata=res://*;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=donatello;persist security info=True;user id=1;password=1;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

NEW WEB.CONFIG

 <add name="donatelloEntities" connectionString="metadata=res://*/EntityModel.Model.csdl|res://*/EntityModel.Model.ssdl|res://*/EntityModel.Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=donatello;user id=sa;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Эта проблема проста, но может привести к потере времени. Я хотел привести пример. Я надеюсь, что это полезно.

Спасибо.

0 голосов
/ 16 апреля 2015

У меня была такая же проблема на моем сайте asp.net, чтобы решить эту проблему, я специально добавил ошибку времени компиляции в один из файлов cs в коде приложения, удалив точку с запятой, затем исправил проблему компиляции, снова добавив точку с запятой .

Этот процесс вызвал повторную компиляцию приложения. После исчезновения этой ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...