2016-12-06 2 views
1

i переименовал столбец в моем классе. Это выглядело так.Переименуйте столбец в EF с первым кодом

public class clsClassForStackoverflow 
{ 
    [Column(TypeName = "varchar"), StringLength(150)] 
    public string Name { get; set; } 

Из-за изменения структуры мне пришлось переименовать его. Поэтому я удалил эту строку и добавил новую собственность. После этого я создал новый файл миграции для подготовки моего обновления базы данных, и в файле он хотел удалить старый столбец и добавить новый. Хорошо, я изменил drop на переименование, потому что в базе данных все еще есть данные. С каплей он исчезнет.

Новая миграция файл:

public partial class _100126_2 : DbMigration 
{ 
    public override void Up() 
    { 
     RenameColumn("dbo.tbClassForStackoverflow", "ClassForStackoverflow_Name", "ClassForStackoverflow_NewName"); 
    } 

    public override void Down() 
    { 
     RenameColumn("dbo.tbClassForStackoverflow", "ClassForStackoverflow_NewName", "ClassForStackoverflow_Name"); 
    } 
} 

После запуска обновления базы данных я посмотрел в мой класс и СВОЙСТВА Didnt изменились. Его еще называют «Имя», а не «NewName». Как я могу изменить это, не позволяя EF думать, что я удалил и добавил столбец?

+1

Вы уверены, что миграция обновила действительную базу данных? Возможно, вы используете другую строку подключения, чем база данных обновлений. – pwas

+0

@pwas да. Строка подключения ведет к нашей базе данных разработки. В таблице уже есть правильные столбцы. Его единственный класс, который каким-то образом не обновил свойство. – Cataklysim

+0

Вы внесли изменения в БД «вручную», а не через миграцию? Или что конкретно проблема сейчас? Я не могу больше следовать ... – ChrFin

ответ

3

Вы должны сделать это изменение в следующем порядке:

  1. переименовывать Name свойства в вашей Сущности в NewName
  2. Добавить новую миграцию в свой проект
  3. Смените миграции сделать переименование вместо Drop/Create, BUT только изменить содержание метода Up/Down
  4. Скомпилировать и запустить миграцию

Так я сделал это несколько раз уже без проблем. Важно не касаться моментального снимка модели, связанного с переносом при его создании.

P.S .: Если я правильно помню, что EF даже обнаруживает переименования, если некоторые (для меня неизвестные) ограничения выполняются, потому что я считаю, что не всегда нужно было менять миграцию при простом переименовании свойств/столбцов.

+0

Работал. Теперь мне просто нужно позаботиться о двух идентичных файлах миграции. Но спасибо вам большое. – Cataklysim

+1

@Cataklysim: Я бы рекомендовал отменить все изменения (DB и код) до того, как сделать «неправильное переименование», а затем переделать его ... – ChrFin

+0

именно то, что я имел в виду :) – Cataklysim

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