У нас есть решение, состоящее из двух проектов - консольного приложения и проекта веб-приложения. Каждый из них имеет идентичный в схеме, но по-разному названный .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 'уже определен "запутанный".