2008-08-15 6 views
8

Я установил VS SP1 и играл с Entity Framework.Обновление схемы базы данных в Entity Framework

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

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

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

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

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

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

+0

Отличный вопрос. Имел тот же вопрос недавно и пару лет назад. :-) Возможно, стоит упомянуть, переименование существующего столбца может вызвать головную боль. – mnemonic 2015-03-25 08:53:12

+0

Да, сейчас он очень зрелый, с codefirst у меня больше нет этой проблемы. – Biri 2015-03-28 09:52:29

ответ

6

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

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

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

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

+0

Изменение типа может сломать сборки, но в реальном мире это случается. Для этого RoR или Django имеет чрезвычайно низкую степень трения. Для обработки «перерыва» вы создаете миграцию данных. Если у EF нет этого, есть много, чтобы догнать. – 2016-12-16 03:10:48

1

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

0

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

5

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

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

0

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

Cheers.

Ruddy

0

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

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

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

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

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

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

0

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

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

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

Смежные вопросы