Подтвердить что ты не робот

Количество членов в концептуальном типе не совпадает с числом членов по типу стороны объекта

Я использую .net framework 3.5 SP1.

После добавления столбца в одну таблицу на Sql Server (а также смены существующего столбца на то, что значение null не должно быть равно null), я больше не могу запускать свой проект без получения этой ошибки:

Число членов в концептуальный тип "XBRLDimensionalModel.axis_t" не соответствовать количеству участников на тип стороны объекта 'EOL.Xbrl.Persistence.Data.axis_t. Убедитесь, что количество участников то же самое.

Я сдался, пытаясь найти и исправить сгенерированный код. Теперь я удалил все свои файлы, связанные с сущностью, и повторно сгенерировал их, начиная с нуля и добавляя новый элемент (ADO.NET Entity Data Model). Я все еще получаю эту ошибку.

Единственный способ, с помощью которого я могу запустить проект, - это отменить все мои ожидающие изменения и использовать последнюю версию из исходного элемента управления и, конечно, изменить два измененных столбца базы данных на нулевое значение.

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

Я изменил свойство на моей модели edmx: "Обработка артефакта метаданных" в "Копировать в выходной каталог". Файлы Designer.cs, csdl, msl, ssdl кажутся совместимыми с последними изменениями в базе данных.

Исключение генерируется при первом обращении к экземпляру entityModel. Таким образом, это до любой загрузки или сохранения данных из измененной таблицы.

любые идеи, в которых я ошибаюсь? Благодаря, ТГ

4b9b3361

Ответ 1

Откройте вашу модель как XML. Удалите все ссылки на этот тип из CSDL. Сохраните и закройте, а затем снова запустите в графическом интерфейсе. Теперь вы должны иметь возможность обновлять модель, как обычно. Если это не сработает, сделайте то же самое, но удалите и из MSL.

Ответ 2

Эта ошибка также может произойти, если файл EDMX был изменен вне Visual Studio. Щелкните правой кнопкой мыши файл EDMX и нажмите "Запустить пользовательский инструмент"

Ответ 3

Это кажется немного подробным для комментария, поэтому я добавляю это как еще один ответ:

В ответ предложение Craig я открыл файл edmx в средстве просмотра XML и удалил все ссылки на Axis_t (включая ассоциации из-за внешних ключей). Из всего файла.

Затем я "обновил" модель, открыв файл edmx в качестве интерфейса GUI, щелкните правой кнопкой мыши | обновить из базы данных | Добавить (вкладка), которая теперь отображает только таблицу Axis_t. Я добавил таблицу, которая, казалось, хорошо работала и включала мой новый столбец, и столбец был правильно отображен.

Затем я выполнил проект с тем же результатом. Такая же ошибка, как указано выше.

Теперь я вернулся к тому, что было в контроле источника, а также изменил столбцы базы данных (новый и измененный) как обнуляемый. Проект работает нормально. Я все еще не смог реализовать новый столбец DB в EF. Он ведет себя так, как будто есть некоторая сохраненная/скомпилированная версия модели, которая не обновляется через процесс "обновления".

Ответ 4

При изменении внешнего ключа с нулевым значением на ненулевое значение (или наоборот) обязательно измените кратность ассоциации с 0..1 на 1 (или наоборот). Дизайнер иногда пропускает это в обновлении из базы данных.

Ответ 5

Я столкнулся с той же проблемой, когда я добавил один столбец в db и добавил соответствующее свойство для объекта (edmx). Я также использовал источник управления для моего решения. Как я заметил, сохраняя изменения в любом файле, сохраните подсказки с опцией перезаписи. Таким образом, я перезаписал файл designer.cs, а также файл конфигурации, и проблема решена.

С уважением, Бхушан

Ответ 6

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

Похоже, что Visual Studio не "очищает" временную папку "obj", и некоторые фрагменты старой модели все еще там.

Если я просто удалю все файлы из папки "obj" и повторно скомпилирую эту ошибку, пройдите.

Модель в каждой версии идеальна, что сводило меня с ума.

Не сказать, что это ответ на вопрос OP, но это определенно другая причина этой ошибки.

Стив

Ответ 7

У меня была такая же проблема часами. Найдено, что в моем файле Designer.cs у одного из свойств моего объекта отсутствовали его атрибуты. (Не знаете, как это произошло?)

 [EdmScalarPropertyAttribute(EntityKeyProperty = false, IsNullable = false)]
 [DataMemberAttribute()]
 public global::System.Int32 ContractCapacity

Теперь сообщение об ошибке имеет смысл, это был недостающий DataMember. После добавления атрибута IT WORKED!!!

Ответ 8

  • Щелкните правой кнопкой мыши файл edmx и откройте XML.
  • Найдите неправильные типы данных и измените их.
  • Сохранить файл.

Это сработало для меня.

Ответ 9

Вот сценарий кошмара, который я только что испытал: у меня есть веб-сайт MVC2 и служба WCF, которые создаются отдельно, но имеют общую конфигурацию. В обоих проектах я использовал одно и то же имя контейнера Entity Container Name; поэтому я взял ту же строку соединения для обоих проектов. В конце концов метаданные вышли из синхронизации между ними и вызвали эту ошибку. Очевидным решением было не использовать одно и то же имя контейнера Entity в двух проектах; изменение на другое имя позволило мне указать уникальные строки соединений и, следовательно, метаданные для каждого компонента, который избегал проблемы.

Теперь, когда я понял это, это очевидно, но у меня был напряженный час или два!