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

Comments