Как правильно обновить Entity Model после изменения структуры базы данных? - PullRequest
16 голосов
/ 06 апреля 2010

Я сделал некоторые изменения в структуре таблиц и особенно в отношениях между таблицами в моей базе данных SQL Server. Теперь я хочу обновить модель Entity на основе этой новой структуры базы данных.

Щелкнув правой кнопкой мыши по файлу edmx, я нахожу опцию «Обновить модель из базы данных». Но когда я делаю это, я получаю вид обновления на 50%: новые столбцы появляются в классах сущностей, но меня смущает множество навигационных свойств, которые все еще присутствуют в модели, хотя соответствующие отношения внешних ключей больше не существуют база данных. ( Редактировать: Также члены в классах модели не удаляются, хотя столбцы в базе данных были удалены.)

Я что-то не так делаю? Или есть другой вариант обновления модели, включая удаление свойств навигации? Или мне нужно вручную удалить эти свойства навигации в файлах модели?

Я использую Entity Framework версии 1 (VS 2008 SP1).

Заранее спасибо за помощь!

Ответы [ 2 ]

16 голосов
/ 06 апреля 2010

Вы делаете правильные вещи для обновления. Однако после того, как вы автоматически сгенерируете модель, вы можете настроить ее. При обновлении дизайнер EF хочет попытаться сохранить все настройки, которые вы могли выполнить. Об этом нужно догадываться, и это не всегда правильно. Я постараюсь объяснить, как это угадывается, поскольку это может помочь вам.

Ваш EDMX состоит из трех частей:

  • Схема клиента (CSDL)
  • Схема магазина (SSDL)
  • Отображение между клиентом и хранилищем (MSL)

Дизайнер "владеет" схемой магазина. Это будет восстанавливать это почти с нуля каждый раз, когда вы обновляете. Хотя можно настроить схему хранилища, отредактировав SSDL вручную, эти изменения часто теряются при обновлении модели.

С другой стороны, вы "владеете" схемой клиента. Дизайнер сгенерирует клиентскую схему для вас при первом запуске и сгенерирует клиентскую схему для вновь импортированных объектов метаданных базы данных, таких как вновь сопоставленные таблицы или столбцы. Но после того, как клиентская схема была сгенерирована для объекта, она обычно не будет восстановлена, потому что дизайнер пытается сохранить ваши настройки. Поэтому, если вы изменяете свою базу данных таким образом, что это влияет на схему клиента, вы должны обновить схему клиента вручную. Это можно сделать в конструкторе графического интерфейса или вручную в XML.

В вашем случае проще всего было бы просто выбрать навигацию в конструкторе графического интерфейса и удалить ее. Это предполагает, что в базе данных больше нет свойства ID для навигации по обеим сторонам отношения.

3 голосов
/ 10 декабря 2014

Если вы работаете с моделью сущностей, которая не была настроена, и вам просто нужно внести изменения из вашей базы данных SQL в проект VS, я считаю, что проще всего удалить модель сущностей и восстановить ее из того же источника. Таким образом, все три части вашего EDMX будут отражать то, что находится в вашей базе данных. Я использовал опцию «Обновить модель из базы данных», а затем отредактировал XML / конструктор и обнаружил, что при работе с большими базами данных это утомительная и трудоемкая работа. Не поймите меня неправильно, это работает на 100%, но гораздо быстрее сохранить вашу модель свежей, воссоздав ее. Даже если вам действительно нужно отредактировать несколько запросов LINQ-to-SQL впоследствии, я считаю, что лучше редактировать запросы LINQ-to-SQL, чем редактировать модели EDMX. Тем не менее, я еще не должен был сделать это. ВАЖНО: Убедитесь, что вы воссоздаете вашу модель с теми же настройками, что и раньше, например, если вы создали ее без множественного числа имен объектов ранее, сделайте то же самое.

...