Ответ 1
Перейдите в папку bin и удалите файл dll и pdb вручную.
У нас есть решение, состоящее из двух проектов - консольного приложения и проекта веб-приложения. Каждый из них имеет идентичный в схеме, но по-разному названный .edmx файл, используемый для доступа к той же базе данных.
Консольное приложение запускается как запланированное задание на том же сервере, на котором размещено веб-приложение. Веб-приложение содержит ссылку на консольное приложение, так как определенные действия в веб-приложении приводят к методам вызова вызываемого приложения. Эта комбинация успешно работает в нашей промежуточной среде в течение многих месяцев.
При выпуске в прямом эфире мы видим следующее сообщение об ошибке не реже одного раза в день:
Указанная схема недействительна. Ошибки:
ProjectName.csdl(3,4): ошибка 0019: имя EntityContainer должно быть уникальный. EntityContainer с именем "ProjectEntities" уже определены. ProjectName.csdl(63,4): ошибка 0019: имя каждого типа в схема должна быть уникальной. Имя типа 'ProjectModel.DataSource' уже было определены. ProjectName.csdl(75,4): ошибка 0019: имя каждого типа в схема должна быть уникальной. Имя типа 'ProjectModel.Error' уже было определены.
Это продолжается, перечисляя все имена типов в нашей схеме.
Эта ошибка может быть устранена путем утилизации пула приложений или перезапуска IIS.
Обратите внимание, что ошибка не возникает, пока веб-приложение не работает некоторое время - это не происходит при компиляции или в первый раз, когда мы обращаемся к приложению.
Моя первоначальная теория заключалась в том, что два контейнера Entity Containers конфликтуют друг с другом, потому что веб-приложение ссылается на консольное приложение, но у них разные имена, что делает ошибку "Имя EntityContainer должно быть уникальным. EntityContainer с именем" ProjectEntities 'уже определен "запутанный".
Перейдите в папку bin и удалите файл dll и pdb вручную.
Когда я сталкивался с этой проблемой в прошлом, я всегда создавал третью, разделяемую библиотеку, которая содержит модель сущности, - так вы знаете, что конфликт имен не будет, если вы решите добавить новую таблицу/столбец/метод для модели, вам нужно только сделать это один раз и т.д. и т.д.
Измените запись строки подключения сущности файла 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
к
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
На всякий случай, если кто-то еще отчаялся и не нашел ответов, я случайно попал с копией моего .edmx файла, включенного в проект во втором месте. Оба были включены в сборку.
; -)
Если это случилось с вами, не бойтесь: вы не были первыми.
Эта ошибка возникает, когда у вас есть несколько файлов model model.edmx в одном проекте библиотеки DLL или библиотеки классов. Хотя причина ошибки не известна мне, вы можете исправить это, удалив другую модель или переместив другой файл model.edmx в другую библиотеку классов.
Также не забудьте удалить ссылки предыдущей DLL
Ну, в моем случае я работаю с другой архитектурой программного обеспечения, потому что у меня разные проекты (dll), они имеют доступ к одной и той же базе данных, но внутри меня есть разные сущности. Итак, когда у меня есть ссылки в проекте, который нуждается во всех или хотя бы двух из них, я получаю эту ошибку
Если я изменяю имя контейнера Entity на каждом из них, я решаю проблему, но теперь моя строка соединения различна, и я должен включить все строки подключения в файл конфигурации для каждой DLL, которую я имею в виду.
Обратите внимание, что при попытке переименовать контейнер объекта в контейнер ранее удаленных сущностей вам нужно будет войти в свой файл web.config или app.config и удалить строку подключения из раздела конфигурации.
Папка для меня была скрыта, поэтому пришлось показывать скрытые файлы, удалять старые dlls/pdb и включать в проект те, которые мне нужны. Восстановлено, работает.
Я исправил эту проблему в EntityFramework 6.0.
Во время создания моделей я называю .edmx именем имени. то есть (MYDbEntities)
После создания я откройте MYDbEntities.Context.cs и изменил класс "Entities" на "MYDbEntities".
Убедитесь, что строка подключения похожа на это
metadata = res:///MYDbEntities.csdl | res:///MYDbEntities.ssdl | res://*/MYDbEntities.msl; поставщик = System.Data.SqlClient; строка подключения поставщика = "источник данных =., начальный каталог = YourDb; сохраняемая информация о безопасности = True; user id = sa; пароль = Sw0rdf! sh; multipleactiveresultsets = True; имя приложения = EntityFramework "
Примечание. Мои объекты находятся в отдельной DLL.
Надеюсь, что это поможет.
В моем случае ни одно из решений не работало. Я, наконец, переработал IIS на своем хостинге, чтобы он работал. Надеюсь, это поможет кому-то :)
Мои сущности были в другой библиотеке классов (MyLibrary.Data). Смена ниже сработала:
<add name="Entities" connectionString="metadata=res://*/;
 provider=MySql.Data.MySqlClient; .....
<add name="Entities" connectionString="metadata=res://MyLibrary.Data;
 provider=MySql.Data.MySqlClient;