Я установил VS SP1 и поиграл с Entity Framework.
Я создал схему из существующей базы данных и попробовал некоторые основные операции.
Большинство из них прошло хорошо, за исключением обновления схемы базы данных.
Я изменил базу данных всеми основными способами:
- добавил новую таблицу
- удалил стол
- добавил новый столбец в существующую таблицу
- удалил столбец из существующей таблицы
- изменил тип существующего столбца
Первые три прошли хорошо, но изменение типа и удаление столбца не последовало за изменениями базы данных.
Есть ли способ сделать это работа от дизайнера? Или это не поддерживается в данный момент? Я еще не нашел связанных материалов, но все еще ищу.
Я предполагаю, что, возможно, этого не произойдет, потому что они сломают сборку для существующего кода, но это всего лишь предположение с моей стороны.
Вот моя логика:
Во-первых, EF должен быть отображением таблицы более 1: 1, поэтому вполне возможно, что если вы удаляете столбец из таблицы A, это не означает, что для этого объекта не должно быть свойства Description. Вы можете просто сопоставить это свойство с другой таблицей.
Во-вторых, изменение типа может привести к поломке сборок. это единственное обоснование там.
Из демонстраций дизайнера, которые я видел, это не безупречный инструмент. Это продукт версии 1.0, поэтому у него наверняка есть свои болевые точки. Изменение типа является одним из них, кажется. Наблюдая за дизайнером и генерацией кода, я понял, что он может сломаться либо во время компиляции (маловероятно), либо во время выполнения (когда модель фактически выполняется).
Вам нужно удалить столбец самостоятельно из конструктора или файла XML.
Я обнаружил, что в целом все еще довольно много ошибок с функциональностью «Обновить модель из базы данных».
Ключи - убийца для меня - мне еще предстоит внести какие-либо изменения в отношение внешнего ключа или добавить первичный ключ в таблицу, чтобы программа корректно работала (так как это приведет к ошибке компиляции в сгенерированном файле). код) - но для решения проблемы достаточно просто удалить модель и повторно импортировать (это займет всего минуту) - это явно не идеально, но у меня никогда не было сбоев при «свежем» импорте.
Как упоминалось ранее, вы можете просто удалить столбец из конструктора. Что касается изменения типа данных столбца: просто обновите модель из базы данных, затем перейдите к отображению таблицы и выберите столбец, который вы изменили в БД. значения справа представляют вашу модель, как ни странно, это не обновляется автоматически, а просто выберите столбец справа и перейдите к свойствам и измените тип данных там. Это должно стать выпадающим меню.
Приветствия.
румяный
Я построил подобное приложение, как ваш запрос. Но мое решение было трудно. Я постараюсь рассказать;
Вы должны создать свои собственные предложения управления базой данных, и эти объекты будут отвечать за создание, обновление схемы базы данных (я создал это вручную).
Я видел хорошую статью и исходный код в блоге команды ADO.NET, тогда вы также можете скачать EDMTools из этого блога, с открытым исходным кодом. И вы также можете внедрить процедуры генерации моделей и обновления из этого в ваш проект.
Наконец, когда ваша схема изменилась, вы должны воссоздать и связать вашу модель и перестроить сборку данных во время выполнения. Но вы должны знать, что наиболее важно думать, вы должны связать свою сборку модели данных со своим проектом со слабосвязанной связью (см. Этот пост )
Другой способ - дождаться выпуска EF 4.0 (сейчас это CTP 1), они объявили, что будут предоставлять функции создания, удаления и обновления DatabaseScript.
Хороший замок
То, как я это делаю (и я делаю все, что вы упомянули, а также переименование столбцов), - это внесение изменений в базу данных и восстановление кода EF с использованием EF Code First.
Я не вмешиваюсь в классы EF Code First для пользы или зла (включая бессмысленно именованные столбцы для отношений), чтобы облегчить процесс.
Ни один дизайнер или генератор схем ORM не сможет вносить изменения в вашу производственную базу данных, если в ней есть ограниченные данные. Вот почему вы всегда должны начинать с проверки, возможны ли ваши изменения в БД, пробовать их в базе данных разработки и затем адаптировать свой код для отражения изменений.