Как обновить структуру моей сущности - PullRequest
3 голосов
/ 20 марта 2011

Я обновлял свою Entity Framework, просто щелкнув правой кнопкой мыши и щелкнув «обновить модель из базы данных».Я обычно захожу на вкладку «Добавить», затем нажимаю на таблицы и нажимаю «Готово».Я также иногда использую «обновить».Каковы различия между ними?а также когда я обновляю или добавляю, иногда сущность выходит неправильно или сохраняет часть старой информации в кеше, как я могу просто заставить сущность соответствовать моей базе данных и очистить любую из старых кэшированных вещей.

Ответы [ 3 ]

5 голосов
/ 20 марта 2011

Да, вы правы. Конструктор немного глючит и не особенно хорошо справляется с некоторыми изменениями схемы. Как правило, когда я добавляю таблицу в базу данных, я запускаю Update model from database и выбираю таблицу на вкладке Add. Работает отлично. Если я добавляю поле в существующую таблицу, я делаю Update model и Refresh. Хорошо работает тоже.

Но если я добавляю одно поле и удаляю другое, или переименовываю существующее поле (насколько я помню), EF не обрабатывает это правильно (добавило новое поле, но не смогло удалить старое и так как старое остался не нанесенным на карту, проверка модели не удалась). Поэтому в этих более сложных случаях я обычно удаляю сущность, а затем выполняю Update model from database и Add.

Недостатком является то, что если вы действительно внесли некоторые изменения (например, переименовали некоторые поля или навигационные свойства объекта), вам придется снова вносить эти изменения.

3 голосов
/ 20 марта 2011

Он не очищает старые предметы. Вы должны удалить их сами. С другой стороны, Visual Studio выдаст вам ошибку при компиляции, указав, что один или два столбца не отображаются. Инструмент Entity Framework - это скорее генератор кода. Он генерирует классы на основе структуры вашей базы данных, а не привязывается к базе данных для получения информации о структуре.

1 голос
/ 20 марта 2011

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

Поверьте, это большой шаг вперед по сравнению с Linq-to-sql, где обновления не было, и вам всегда приходилось удалятьвсе, включая ваши изменения, когда вы хотели обновить вашу модель.Если вы внесли много изменений, вы всегда можете также удалить свою сущность в EF Designer.EF designer предлагает выбор обновления или воссоздания (путем удаления старого).

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