Ошибка 3004: проблема с отображением фрагмента, начинающегося со строки

У меня есть эта ошибка, когда я создаю свою веб-службу:

Ошибка 3004: проблема с отображением фрагмента, начинающегося со строки 323: сопоставление не указано для свойств JE_TRN_HS.JE_HDR_HSJE_HDR_KEY. Тип объекта [TESTCPModel.JE_TRN_HS

Вот что случилось. Я создал эту модель данных объекта из существующей базы данных. Я добавил 2 таблицы и перестроил веб-сервис. Сборка прошла успешно.

ЗАТЕМ я добавил ассоциацию между двумя таблицами. Когда я попытался перестроить, это не удалось с сообщением об ошибке, отображаемым выше!

Теперь вот кикер! Я удалил только что добавленную ассоциацию и перестроил. Сборка не удалась с тем же сообщением об ошибке!? Единственный способ избавиться от этой ошибки - удалить вторую таблицу, перестроить и повторно добавить вторую таблицу??

Я искал ВЕЗДЕ решение этой проблемы! Спасибо, Стив.


person Steve Kershaw    schedule 19.05.2011    source источник
comment
Я не знаю, почему это случилось со мной, но я безуспешно пытался удалить столбец и обновить модель объекта. Затем я удалил всю таблицу и обновил модель, и проблема исчезла.   -  person Zonus    schedule 12.06.2020


Ответы (13)


В моем случае мне не разрешено изменять существующие таблицы, но я обнаружил, что когда вы добавляете новую таблицу с установленным флажком «Включить столбцы внешнего ключа в модель» в EF4, а таблица не содержит никаких отношений внешнего ключа, вы пытаетесь добавить ассоциации это вызовет эту ошибку.

Определение ограничений в модели EF4, которая не существует в базе данных


В случае, если связанная статья исчезнет, ​​решение:

Вам нужно открыть окно свойств ассоциации, а затем щелкнуть эллипсы Referential Constraint, чтобы перейти к диалоговому окну ограничения ref. Затем выберите правильное поле для параметра «Зависимое свойство».

person Carlos    schedule 20.09.2011
comment
Хороший ответ. У меня была та же проблема, и после прочтения этого ответа, вместо того, чтобы работать в окне свойств, я удалил класс, соответствующий моей таблице, и дал команду обновления модели. Он воссоздал класс объекта и устранил проблему с внешним ключом. Теперь это идеально. Благодаря ответу. - person Venugopal M; 20.08.2013

В моем случае другой разработчик удалил поле из таблицы в базе данных. Осознав это, удаление таблицы из модели объекта и добавление ее обратно решило проблему.

person Graham Laight    schedule 15.04.2014

Я столкнулся с этой проблемой прямо сейчас... Нужно добавить скалярное свойство, скажем, custom_property в существующую таблицу с помощью конструктора в Visual Studio.

Я мог бы обновить модель из базы данных, но это был не вариант. Это вызывало много ошибок в модели. Это огромная модель базы данных, и таблица, которая мне понадобилась для добавления этого свойства, может иметь более 30 взаимосвязей. Я просто хотел сопоставить этот новый столбец custom_property, который был добавлен в таблицу с именем custom_table.

После добавления скалярного свойства непосредственно в дизайнере возникало следующее исключение:

  • InnerException {"\r\nModels.MyDB.msl(352,10): ошибка 3004: проблема с сопоставлением фрагментов, начинающихся со строки 352: сопоставление не указано для свойств custom_table.custom_property в Set custom_table.\r\nСущность с ключом (PK ) не будет выполняться в оба конца, если:\r\n Объект имеет тип [MyDB.custom_table]\r\n"} System.Exception {System.Data.Entity.Core.MappingException}

В Error List в VS это показывалось: Error 11009: Property ' ' is not mapped

Шаги, которые я предпринял, чтобы исправить это:

  1. Отредактировал файл .edmx в Visual Studio Code;
  2. Искал custom_table;
  3. Дополнен XML-код .edmx сопоставлениями.

Это были места, где мне пришлось добавить сопоставления:

<EntityType Name="custom_table">
    <Key>
        <PropertyRef Name="some_id" />
    </Key>
    <Property Name="some_id" Type="int" Nullable="false" />
    <Property Name="other_id" Type="int" />
    ...
    <Property Name="custom_property" Type="int" Nullable="true" /> <= THIS WAS ADDED BY ME
</EntityType>

и

<EntitySetMapping Name="custom_table">
  <EntityTypeMapping TypeName="MyDB.custom_table">
    <MappingFragment StoreEntitySet="custom_table">
      <ScalarProperty Name="some_id" ColumnName="some_id" />
      <ScalarProperty Name="other_id" ColumnName="other_id" />
      ...
      <ScalarProperty Name="custom_property" ColumnName="custom_property" /> <= THIS WAS ADDED BY ME
    </MappingFragment>
  </EntityTypeMapping>
</EntitySetMapping>
person Leniel Maccaferri    schedule 23.09.2019

Вы не можете просто добавить таблицы из базы данных в свою модель, а затем создать новую ассоциацию в модели. По умолчанию он использует независимую ассоциацию, которая должна быть сопоставлена ​​с его аналогом базы данных = отношение также должно существовать в базе данных. Вы должны смоделируйте ваше отношение как ассоциацию FK, но она допускает только ассоциации один-к-одному и один-ко-многим. Различия между типами ассоциаций описаны здесь.

person Ladislav Mrnka    schedule 19.05.2011

У меня была эта проблема, когда я закончил «обновление модели из базы данных» после изменения строки подключения.

Щелкнув правой кнопкой мыши по объекту и включив и выключив клавишу, кажется, что это вызвало обновление и устранило проблему. Это больше похоже на ошибку в Entity framework.

Следует отметить, что в этом случае я использовал коннектор MySQL, поэтому я подозреваю, что в целом он довольно привередлив.

person Highstead    schedule 28.05.2013

Вы можете получить эту ошибку, если у вас есть свойство в модели, которое не может быть сопоставлено.

Например, я преобразовывал некоторые Linq2Sql в EF6 и получил ошибку в поле Binary. Двоичный — это тип System.Data.Linq, но для EF он должен быть byte[]. Его изменение решило проблему.

person Simon_Weaver    schedule 25.09.2016

Возникла аналогичная проблема с EF 6:

exception.InnerException
{"\r\nEntities.EAM.msl(458,10) : error 3004: Problem in mapping fragments starting at line 458:No mapping specified for properties InspectionPdfReportRequest.SyncDate in Set InspectionPdfReportRequests.\r\nAn Entity with Key (PK) will not round-trip when:\r\n  Entity is type [Model.Entities.InspectionPdfReportRequest]\r\n\r\nEntities.EAM.msl(488,10) : error 3004: Problem in mapping fragments starting at line 488:No mapping specified for properties InspectionReportRequest.SyncDate in Set InspectionReportRequests.\r\nAn Entity with Key (PK) will not round-trip when:\r\n  Entity is type [Model.Entities.InspectionReportRequest]\r\n"}
    Data: {System.Collections.ListDictionaryInternal}
    HResult: -2146232032
    HelpLink: null
    InnerException: null

Проблема оказалась в том, что я внес изменение в файл *.edmx для моего приложения EF, ориентированного на базу данных, непосредственно в текстовом редакторе, а не с помощью конструктора. Поэтому просто отменил изменения текста и применил их с помощью дизайнера, и ошибка исчезла. Нажатие «Сохранить» в дизайнере обновляет связанный файл *.msl.

person user8128167    schedule 12.01.2017

Я получал эту ошибку от Linqpad и не мог понять, почему это начало происходить внезапно и будет ли это проблемой в моем приложении, использующем контекст. Я также только что удалил класс, который был недавно создан новым объектом, а затем щелкнул правой кнопкой мыши файл .tt и нажал «запустить до курсора», чтобы восстановить класс. Это исправило это для меня.

person spat    schedule 11.03.2017

Опция «Обновление модели из базы данных» у меня не работает.

Поэтому мне нужно сначала удалить все объекты, прежде чем обновлять модель из базы данных, чтобы успешно исправить решение.

person Willy David Jr    schedule 13.09.2018

Если вы применили сопоставление к объекту, попробуйте удалить этот столбец из таблицы, что решит проблему.

person Vidhya A    schedule 21.11.2018

В моем случае мой администратор базы данных изменил имена столбцов с заглавных на строчные. Я решил проблему, путем повторного обновления (обновления модели из базы данных) для этой таблицы. Затем удалил предыдущие столбцы в верхнем регистре.

person ZarNi Myo Sett Win    schedule 26.04.2019

В моем случае я переименовал поле в таблице и добавил первичный ключ. После этого у меня появилась эта ошибка. Я перешел к своему списку объектов/моделей, и после его удаления и обновления из базы данных у меня снова была та же ошибка. Я пробовал несколько раз, но ничего. Класс, который генерировал EF, представлял собой смесь старой структуры таблицы и новой.

После некоторого исследования, это решение: перейдите к диаграмме ваших сущностей. Найдите свою таблицу или откройте справа обозреватель моделей (щелкните правой кнопкой мыши по диаграмме — открыть обозреватель моделей). Найдите свою модель/таблицу в разделе ...Model, ...Model.Store и удалите ее. После этого снова добавьте таблицу из базы данных и проблема решена.

person Ramon    schedule 15.05.2019

в моем случае в решении сначала я обновил файл MyProjectname.edmx, но это не сработало. Затем я удалил таблицу, которую я изменил, и снова обновил базу данных формы модели (не обновляя ее). И это работает.

person Ali Mahdian    schedule 02.01.2020