В основном я получил таблицу в моей базе данных EF со следующими свойствами:
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Image { get; set; }
public string WatchUrl { get; set; }
public int Year { get; set; }
public string Source { get; set; }
public int Duration { get; set; }
public int Rating { get; set; }
public virtual ICollection<Category> Categories { get; set; }
Это работает нормально, однако, когда я изменяю int рейтинга на двойное, я получаю следующую ошибку при обновлении базы данных:
Объект «DF_ Movies _Rating__48CFD27E» зависит от столбца «Рейтинг». ALTER TABLE ALTER COLUMN Оценка не выполнена, поскольку один или несколько объектов имеют доступ к этому столбцу.
В чем проблема?
sql
sql-server
database
entity-framework
entity-framework-4
Джордан Топор
источник
источник
Ответы:
Попробуй это:
Удалите ограничение DF_Movies_Rating__48CFD27E перед изменением типа вашего поля.
Ограничение обычно создается автоматически СУБД (SQL Server).
Чтобы увидеть ограничение, связанное с таблицей, разверните атрибуты таблицы в обозревателе объектов , а затем категорию Ограничения, как показано ниже:
Вы должны удалить ограничение перед изменением типа поля.
источник
update-database
его воссоздать себя снова я отправил этот вопрос: stackoverflow.com/questions/40267769/...Это
tsql
путьДля полноты, это просто показывает комментарий @Joe Taras в качестве ответа
источник
Я добавляю это как ответ, чтобы объяснить, откуда исходит ограничение. Я пытался сделать это в комментариях, но там сложно отредактировать: - /
Если вы создаете (или изменяете) таблицу со столбцом, который имеет значения по умолчанию, это создаст для вас ограничение.
Например, в вашей таблице это может быть:
Это создаст ограничение по умолчанию 100.
Если вы вместо этого создадите это так
Затем вы получите ограничение с хорошим именем, на которое легче ссылаться при изменении указанной таблицы.
Вы можете объединить эти последние 2 оператора, чтобы изменить столбец и назвать ограничение в одной строке (в любом случае, если это уже существующая таблица)
источник
Поскольку ограничение имеет непредсказуемое имя, вы можете написать специальный скрипт ( DropConstraint ), чтобы удалить его, не зная его имени (было протестировано в EF 6.1.3):
источник
MS SQL Studio заботится о том, когда вы удаляете столбец, но если вам нужно удалить ограничение программно, вот простое решение
Вот фрагмент кода, который удалит столбец с ограничением по умолчанию:
Просто замените TableName и ColumnName на соответствующие значения. Вы можете безопасно запустить это, даже если столбец уже удален.
Бонус : вот код для удаления внешних ключей и других типов ограничений.
Блог
источник
Когда мы пытаемся удалить столбец, от которого зависит, мы видим такую ошибку:
удалить ограничение, которое зависит от этого столбца с помощью:
Пример:
Отбросить ограничение (DF__Employees__Colf__1273C1CD):
Тогда вы можете удалить столбец:
источник
Решение :
открыть таблицу базы данных -> развернуть таблицу -> развернуть ограничения и увидеть это
источник
У меня была эта ошибка при попытке запустить миграцию, чтобы обойти ее, я переименовал столбец и заново сгенерировал миграцию, используя
в консоли диспетчера пакетов. Я тогда смог бежать
успешно.
источник