Ответ 1
С тех пор я обнаружил, что после добавления/изменения/удаления свойств на своих объектах я должен "Генерировать базу данных из модели", прежде чем компилировать, в противном случае получаю ошибки сопоставления 3004.
У меня есть дизайн первой модели Entity Framework 4. Я создаю первый проект моей модели в дизайнере, и все было хорошо. Я скомпилировал, сгенерировал базу данных и т.д.
Впоследствии я попытался добавить строковый скаляр (Nullable = true) к одному из моих существующих сущностей, и я продолжаю получать этот тип ошибки при компиляции:
Ошибка 3004: проблема с отображением фрагменты, начинающиеся со строки 569: Нет отображение, заданное для свойств MyEntity.MyValue в Set MyEntities. Объект с ключом (PK) не будет round-trip when: Entity type [MyEntities.MyEntity]
Мне нужно вручную открыть файл EDMX и исправить XML всякий раз, когда я добавляю скаляры.
Идеи о том, что происходит?
С тех пор я обнаружил, что после добавления/изменения/удаления свойств на своих объектах я должен "Генерировать базу данных из модели", прежде чем компилировать, в противном случае получаю ошибки сопоставления 3004.
Я просто удалил нарушающие таблицы из модели, а затем добавил их обратно, и все было хорошо.
Для тех из вас, кто создает модель из базы данных, я столкнулся с этой проблемой после того, как внес изменения в свою БД. Это произошло, когда я изменил имя поля в БД по той или иной причине (я думаю, что это также произойдет, если вы измените тип данных).
Решение для меня было щелкнуть правой кнопкой мыши по рабочей области и выбрать "Обновить модель из базы данных". Это должно добавить свойства из БД к вашей модели, однако оно НЕ удаляет ваши старые свойства, и это даст вам ошибку 3004.
Щелкните правой кнопкой мыши на рабочей области и выберите "Подтвердить". Это должно дать вам список ошибок, показывающий оскорбительные свойства. Затем вы можете щелкнуть правой кнопкой мыши каждое свойство оскорбления и удалить его вручную из вашей модели.
Это решило проблему для меня. Надеюсь, это поможет кому-то другому.
Если вы хотите изменить свою базу данных, не регенерируя всю модель или не воссоздавая свою базу данных из модели, я считаю самым простым и безопасным изменить свойства диаграммы 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
Если все ваши запросы записаны в хранимых процедурах, и вы просто пытаетесь заполнить модель, вы можете переключиться на сложный тип, который работал у меня.
Как создать сложный тип:
Сопоставьте сохраненные процедуры с сложный тип.
Я надеюсь, что это поможет кому-то.
Я получил ту же проблему после переименования свойства на одном из моих объектов.
Я выяснил, что сопоставление между свойством моей сущности и соответствующим столбцом в таблице не было установлено.
Вы можете установить это с помощью редактора, щелкнув правой кнопкой мыши на объекте в модели и выбрав "Отображение таблицы". Убедитесь, что свойства сопоставлены с столбцом в базе данных.
Изменить: мне также нужно было перезапустить мой tt файл для создания новых классов. (Возможно, с тех пор, как у меня есть это в другом проекте?)
После просмотра файла xml (edmx) переместите модель в другой проект и поймите, что все в порядке, я решил закрыть и открыть Visual Studio и снова выполнить компиляцию, затем исчезнет ошибка.
Другая альтернатива для этого, не удаляя таблицу из диаграммы и повторно добавляя ее, - это использовать функцию сопоставления таблиц.