Обновить схему базы данных в Entity Framework

Я установил VS SP1 и поиграл с Entity Framework.

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

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

Я изменил базу данных всеми основными способами:

  • добавил новую таблицу
  • удалил стол
  • добавил новый столбец в существующую таблицу
  • удалил столбец из существующей таблицы
  • изменил тип существующего столбца

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

Есть ли способ сделать это работа от дизайнера? Или это не поддерживается в данный момент? Я еще не нашел связанных материалов, но все еще ищу.

15.08.2008 11:15:05
Отличный вопрос Была такая же проблема недавно и пару лет назад. :-) Возможно, стоит упомянуть, что переименование существующего столбца может вызвать головную боль.
mnemonic 25.03.2015 08:53:12
Да, сейчас он очень зрелый, с codefirst у меня больше нет этой проблемы.
Biri 28.03.2015 09:52:29
7 ОТВЕТОВ
РЕШЕНИЕ

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

Вот моя логика:

Во-первых, EF должен быть отображением таблицы более 1: 1, поэтому вполне возможно, что если вы удаляете столбец из таблицы A, это не означает, что для этого объекта не должно быть свойства Description. Вы можете просто сопоставить это свойство с другой таблицей.

Во-вторых, изменение типа может привести к поломке сборок. это единственное обоснование там.

6
15.08.2008 16:18:22
Изменение типа может нарушить сборку, но в реальных приложениях это происходит. Для этого у RoR или Django очень низкий коэффициент трения. Чтобы справиться с «разрывом», вы создаете миграцию данных. Если у EF этого нет, то многое наверстать.
Csaba Toth 16.12.2016 03:10:48

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

1
19.08.2008 03:55:57

Вам нужно удалить столбец самостоятельно из конструктора или файла XML.

0
17.09.2008 07:40:16

Я обнаружил, что в целом все еще довольно много ошибок с функциональностью «Обновить модель из базы данных».

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

5
24.09.2008 18:34:18
Было так неправильно удалять и начинать все сначала ... но я думаю, что я не единственный человек, который должен был прибегнуть к этому!
Matt Bridges 19.04.2010 18:55:36

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

Приветствия.

румяный

0
3.08.2009 23:41:53

Я построил подобное приложение, как ваш запрос. Но мое решение было трудно. Я постараюсь рассказать;

  1. Вы должны создать свои собственные предложения управления базой данных, и эти объекты будут отвечать за создание, обновление схемы базы данных (я создал это вручную).

  2. Я видел хорошую статью и исходный код в блоге команды ADO.NET, тогда вы также можете скачать EDMTools из этого блога, с открытым исходным кодом. И вы также можете внедрить процедуры генерации моделей и обновления из этого в ваш проект.

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

    Другой способ - дождаться выпуска EF 4.0 (сейчас это CTP 1), они объявили, что будут предоставлять функции создания, удаления и обновления DatabaseScript.

Хороший замок

0
9.10.2009 21:00:40

То, как я это делаю (и я делаю все, что вы упомянули, а также переименование столбцов), - это внесение изменений в базу данных и восстановление кода EF с использованием EF Code First.

Я не вмешиваюсь в классы EF Code First для пользы или зла (включая бессмысленно именованные столбцы для отношений), чтобы облегчить процесс.

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

0
13.02.2013 14:03:25