Entity Framework 4 ошибка отображения фрагмента при добавлении нового объекта скаляр - PullRequest
70 голосов
/ 09 июня 2010

У меня есть Entity Framework 4, модель первого дизайна. Я создаю первый проект моей модели в дизайнере, и все было хорошо. Я скомпилировал, сгенерировал базу данных и т. Д.

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

Ошибка 3004: проблема в отображении фрагменты, начинающиеся со строки 569: нет отображение указано для свойств MyEntity.MyValue в Set MyEntities. Сущность с ключом (PK) не будет туда и обратно, когда: Тип объекта [MyEntities.MyEntity]

Мне по-прежнему приходится вручную открывать файл EDMX и исправлять XML всякий раз, когда я добавляю скаляры.

Идеи о том, что происходит?

Ответы [ 8 ]

76 голосов
/ 10 июня 2010

С тех пор обнаружил, что после того, как я добавляю / изменяю / удаляю свойства на своих объектах, я должен "Сгенерировать базу данных из модели" перед компиляцией, в противном случае я получаю 3004 ошибки отображения.

42 голосов
/ 25 июня 2011

Я просто удалил из модели поврежденные таблицы, а затем добавил их обратно, и все было хорошо.

29 голосов
/ 14 августа 2012

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

Решением для меня было щелкнуть правой кнопкой мыши рабочее пространство и выбрать «Обновить модель из базы данных». Это должно добавить свойства из БД в вашу модель, однако это НЕ удалит ваши старые свойства, и они приведут к ошибке 3004.

Щелкните правой кнопкой мыши по рабочему пространству и выберите «Проверить». Это должно дать вам список ошибок, показывающий нарушающие свойства. Затем вы можете щелкнуть правой кнопкой мыши каждое свойство-нарушитель и удалить его вручную из вашей модели.

Это исправило проблему для меня. Надеюсь, это поможет кому-то еще.

11 голосов
/ 23 апреля 2013

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

Ошибка даст вам номер строки:

Проблема при отображении фрагментов, начинающихся со строки 569

Просто откройте файл edmx в текстовом редакторе, перейдите к этой строке, и должно быть совершенно очевидно, что нужно исправить.Есть раздел, который будет выглядеть так:

<EntityTypeMapping TypeName="YourModel.YourType">
  <MappingFragment StoreEntitySet="YourType">
    <ScalarProperty Name="PropertyName1" ColumnName="DatabaseColumn1" />
    <ScalarProperty Name="PropertyName2" ColumnName="DatabaseColumn2" />
    ...
  </MappingFragment>
</EntityTypeMapping>

Просто убедитесь, что есть узел для каждого имени свойства / столбца, которое вам нужно, и что все свойства также перечислены в разделе <EntityType Name="YourTable"> в верхней частидокумент edmx

1 голос
/ 05 февраля 2016

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

  1. Перейти в браузер модели
  2. Щелкните правой кнопкой мыши таблицуname.
  3. Выберите сопоставление таблиц
  4. Visual Studio покажет окно со свойствами EF, которые соответствуют / отсутствуют столбцы таблицы.
  5. Выбрать / сопоставить соответствующий столбец с отсутствующим свойством

enter image description here

1 голос
/ 09 февраля 2011

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

Как создать сложный тип:

  1. Вручную измените имя Созданный вами объект возникли проблемы с именем не уже используется в вашем файле EDMX.
  2. Выберите окно Обозреватель моделей и щелкните правой кнопкой мыши / добавьте новый сложный тип.
  3. Копировать / Вставить свойства оригинальная модель сложного типа.
  4. Сопоставьте свои хранимые процедуры с сложный тип.

    Надеюсь, это кому-нибудь поможет.

0 голосов
/ 14 марта 2013

После просмотра XML-файла (edmx) переместите модель в другой проект и обнаружите, что все в порядке, я решил закрыть и открыть Visual Studio и снова скомпилировать, затем ошибка исчезнет.

0 голосов
/ 17 февраля 2013

Я получил ту же проблему после переименования свойства в одном из моих объектов.

Я обнаружил, что сопоставление между свойством моей сущности и соответствующим столбцом в таблице не установлено.

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

Редактировать: мне также нужно было повторно запустить мой файл tt для генерации новых классов. (Может быть, так как у меня есть это в другом проекте?)

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