none
Как в MVC CodeFirst добавить уже существующую в базе таблицу? RRS feed

  • Вопрос

  • MVC CodeFirst.

    Одну из таблиц создал в базе средствами SQL.

    Как теперь для нее добавить модель с контекстом, чтобы миграция не пыталась создать уже существующую таблицу?

    5 июля 2014 г. 13:26

Ответы

  • Спасибо, пока не нашел решения сделал следующим образом.

    1. Создал модель и контекст для таблицы как обычно.

    2. Создал миграцию, а в ней перед созданием новой таблицы переименовал старую, а после перенес существующие записи )).

    Код миграции:

                ' Переименовываем Index Primary Key в существующей таблице (будет создаваться с тем же именем и не сможет)
                Sql("sp_rename N'[tbl_Name].[PK_index_Name]', N'new_index_name', N'INDEX'")

                ' Переименовываем таблицу
                RenameTable("tbl_Name", "tbl_Name_old")

                 ' Этот код создан миграцией автоматически

                 CreateTable(
                    "dbo.tbl_Name",
      ...bla-bla-bla)

                ' Отключаем автоинкремент
                Sql("SET IDENTITY_INSERT dbo.tbl_Name ON")
                ' Копируем существующие данные из старой таблицы в новую
                Sql("INSERT INTO tbl_Name (Col1, Col2, Col3, ...обязательно перечислить все поля) SELECT * FROM tbl_Name_old")
                ' Включаем автоинкремент
                Sql("SET IDENTITY_INSERT dbo.tbl_Name OFF")



    8 июля 2014 г. 13:55

Все ответы

  • Посмотрите данный вариант.

    Сделаем содержимое сообщества лучше, вместе!

    • Предложено в качестве ответа AndreyVeselovMVP 8 июля 2014 г. 12:52
    Модератор
  • Есть такая возможность - Reverse Engineering Code First. Доступна в последнем обновлении EF6 в Wizard при добавлении новой Entity Data Model (пункт Code First From Database) или для старых версий в EF Power Tools.

    Позволяет по БД создать описания для CF.

    • Предложено в качестве ответа AndreyVeselovMVP 8 июля 2014 г. 12:52
  • Спасибо, пока не нашел решения сделал следующим образом.

    1. Создал модель и контекст для таблицы как обычно.

    2. Создал миграцию, а в ней перед созданием новой таблицы переименовал старую, а после перенес существующие записи )).

    Код миграции:

                ' Переименовываем Index Primary Key в существующей таблице (будет создаваться с тем же именем и не сможет)
                Sql("sp_rename N'[tbl_Name].[PK_index_Name]', N'new_index_name', N'INDEX'")

                ' Переименовываем таблицу
                RenameTable("tbl_Name", "tbl_Name_old")

                 ' Этот код создан миграцией автоматически

                 CreateTable(
                    "dbo.tbl_Name",
      ...bla-bla-bla)

                ' Отключаем автоинкремент
                Sql("SET IDENTITY_INSERT dbo.tbl_Name ON")
                ' Копируем существующие данные из старой таблицы в новую
                Sql("INSERT INTO tbl_Name (Col1, Col2, Col3, ...обязательно перечислить все поля) SELECT * FROM tbl_Name_old")
                ' Включаем автоинкремент
                Sql("SET IDENTITY_INSERT dbo.tbl_Name OFF")



    8 июля 2014 г. 13:55