Basicamente, recebi uma tabela no meu banco de dados EF com as seguintes propriedades:
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; }
Funciona bem, no entanto, quando altero o int de Rating para um dobro, recebo o seguinte erro ao atualizar o banco de dados:
O objeto 'DF_ Movies _Rating__48CFD27E' depende da coluna 'Rating'. ALTER TABLE ALTER COLUMN A classificação falhou porque um ou mais objetos acessam esta coluna.
Qual é o problema?
sql
sql-server
database
entity-framework
entity-framework-4
Jordan Axe
fonte
fonte
Respostas:
Tente o seguinte:
Remova a restrição DF_Movies_Rating__48CFD27E antes de alterar seu tipo de campo.
A restrição geralmente é criada automaticamente pelo DBMS (SQL Server).
Para ver a restrição associada à tabela, expanda os atributos da tabela no Pesquisador de objetos , seguidos pela categoria Restrições, como mostrado abaixo:
Você deve remover a restrição antes de alterar o tipo de campo.
fonte
update-database
novo, publiquei este problema: stackoverflow.com/questions/40267769/…Este é o
tsql
caminhoPara ser completo, isso apenas mostra o comentário de @Joe Taras como resposta
fonte
Estou adicionando isso como uma resposta para explicar de onde vem a restrição. Tentei fazê-lo nos comentários, mas é difícil editar bem lá: - /
Se você criar (ou alterar) uma tabela com uma coluna com valores padrão, ela criará a restrição para você.
Na sua tabela, por exemplo, pode ser:
Isso criará a restrição para o padrão 100.
Se você criá-lo assim
Então você obtém uma restrição bem nomeada que é mais fácil de referenciar quando você está alterando a tabela.
Você pode combinar essas duas últimas instruções para alterar a coluna e nomear a restrição em uma linha (você precisa, se for uma tabela existente)
fonte
Como a restrição tem nome imprevisível, você pode escrever um script especial ( DropConstraint ) para removê-lo sem saber o nome (foi testado no EF 6.1.3):
fonte
O MS SQL Studio cuida de quando você exclui a coluna, mas se você precisar Excluir Restrições Programaticamente, aqui está uma solução simples
Aqui está um trecho de código que solta uma coluna com uma restrição padrão:
Apenas substitua TableName e ColumnName pelos valores apropriados. Você pode executar isso com segurança, mesmo que a coluna já tenha sido descartada.
Bônus : Aqui está o código para descartar chaves estrangeiras e outros tipos de restrições.
Blog
fonte
Quando tentamos soltar uma coluna da qual dependemos, vemos esse tipo de erro:
descarte a restrição que depende dessa coluna com:
Exemplo:
Restrição de descarte (DF__Employees__Colf__1273C1CD):
Então você pode soltar a coluna:
fonte
Solução:
abra a tabela do banco de dados -> expanda a tabela -> expanda as restrições e veja isso
fonte
Ocorreu um erro ao tentar executar uma migração para contorná-la. Renomeei a coluna e gere novamente a migração usando
no console do gerenciador de pacotes. Eu era capaz de correr
com sucesso.
fonte