Имя EntityContainer должно быть уникальным в разных сборках? - PullRequest
5 голосов
/ 04 февраля 2011

У меня есть два проекта:

  • News.Data
  • Tags.Data

Оба определяют Entities.Когда я пытаюсь выполнить

using (var db = new News.Data.Entities("name=Entities"))
{
    results1 = db.News.ToList();
}

using (var db = new Tag.Data.Entities("name=Entities"))
{
    results2 = db.Tag.ToList();
}

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

Указанная схема недопустима.Ошибки: Model1.csdl (3,4): ошибка 0019: имя EntityContainer должно быть уникальным.EntityContainer с именем «Entities» уже определен.

Можно ли использовать

News.Data.Entities
Tags.Data.Entities

вместо

News.Data.NewsEntities
Tags.Data.TagsEntities

?

Ответы [ 3 ]

4 голосов
/ 04 февраля 2011

Строки подключения настраиваются на уровне приложения, а имя контейнера служит уникальным идентификатором.Либо измените containerNames на уникальное значение, либо переопределите конструктор по умолчанию ObjectContext, возможно, для поиска Setting, который можно настроить на уровне сборки.

Редактировать: при создании экземпляра ObjectContext, News.Data.Entities в этом примере базовый класс вашего контекста обычно создается с ContainerName.Этот параметр дает ObjectContext всю необходимую информацию, чтобы установить соединение с магазином и выполнить всю работу по отображению.

По сути, устанавливается связь между типом ObjectContext и ContainerName.При создании экземпляра вашего второго контекста Tags.Data.Entities, который является другим типом, он попытается связать тип с контейнером, и это то, что вызывает исключение, поскольку вы не можете связать одно и то же имя контейнера дважды.

Для решения этой проблемы лучше всего было бы воссоздать EDMX с другими именами контейнеров.Если удаление не является опцией, вы можете изменить параметр ContainerName в конструкторе, а затем взломать edmx в блокноте, найти EntitiesModelStoreContainer и изменить часть «Entities», указав новое имя контейнера.

Надеюсь, это поможет ...

0 голосов
/ 16 июня 2014

Возможно, проблема не в вашей логике. Я иногда сталкиваюсь с этим, когда переключаюсь между профилями сборки. Чтобы исправить это, я удаляю все временные файлы и делаю чистую сборку.

0 голосов
/ 04 февраля 2011

Я так понимаю, вы пробовали это:

using (var db = new News.Data.Entities("name=NewsEntities"))
{
    results1 = db.News.ToList();
}

using (var db = new Tag.Data.Entities("name=TagEntities"))
{
    results2 = db.Tag.ToList();
}

Ваша проблема в том, что два проекта имеют одно и то же имя контейнера сущностей. Вам нужно изменить (хотя бы) один из них.

Редактировать: Извините, чтобы ответить на ваш точный вопрос ... Нет!

Можно ли использовать

News.Data.Entities
Tags.Data.Entities

вместо

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