Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Во-вторых, изменение типа может просто привести к нарушению сборки.это единственное разумное объяснение.

Другие советы

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

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

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

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

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

Ваше здоровье.

Румяный

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top