Обновить схему базы данных в Entity Framework - PullRequest
8 голосов
/ 15 августа 2008

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

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

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

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

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

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

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

Ответы [ 7 ]

6 голосов
/ 15 августа 2008

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

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

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

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

5 голосов
/ 24 сентября 2008

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

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

1 голос
/ 19 августа 2008

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

0 голосов
/ 13 февраля 2013

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

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

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

0 голосов
/ 10 октября 2009

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

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

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

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

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

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

0 голосов
/ 04 августа 2009

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

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

Радди

0 голосов
/ 17 сентября 2008

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

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