Entity Framework 4 отображает ошибку фрагмента при добавлении нового скалярного объекта

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

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

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

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

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

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

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

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

Ответ 4

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

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

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

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

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

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

Ответ 5

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

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

  • Вручную изменить имя Созданный класс Entity имеющие проблемы с именем не уже используется в вашем файле edmx.
  • Выберите окно браузера модели и щелкните правой кнопкой мыши/добавьте новый сложный тип.
  • Копировать/Вставить свойства оригинальной модели к сложному типу.
  • Сопоставьте сохраненные процедуры с сложный тип.

    Я надеюсь, что это поможет кому-то.

Ответ 6

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

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

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

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

Ответ 7

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

Ответ 8

Другая альтернатива для этого, не удаляя таблицу из диаграммы и повторно добавляя ее, - это использовать функцию сопоставления таблиц.

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

введите описание изображения здесь