Básicamente obtuve una tabla en mi base de datos EF con las siguientes propiedades:
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 bien, sin embargo, cuando cambio el int de Rating para que sea doble, aparece el siguiente error al actualizar la base de datos:
El objeto 'DF_ Movies _Rating__48CFD27E' depende de la columna 'Calificación'. ALTER TABLE ALTER COLUMN La calificación falló porque uno o más objetos acceden a esta columna.
¿Cual es el problema?
sql
sql-server
database
entity-framework
entity-framework-4
Jordan Axe
fuente
fuente
Respuestas:
Prueba esto:
Elimine la restricción DF_Movies_Rating__48CFD27E antes de cambiar su tipo de campo.
La restricción generalmente es creada automáticamente por el DBMS (SQL Server).
Para ver la restricción asociada con la tabla, expanda los atributos de la tabla en el Explorador de objetos , seguido de la categoría Restricciones como se muestra a continuación:
Debe eliminar la restricción antes de cambiar el tipo de campo.
fuente
update-database
a recrearse nuevamenteEste es el
tsql
caminoPara completar, esto solo muestra el comentario de @Joe Taras como respuesta
fuente
Estoy agregando esto como respuesta para explicar de dónde viene la restricción. Traté de hacerlo en los comentarios, pero es difícil de editar bien allí: - /
Si crea (o modifica) una tabla con una columna que tiene valores predeterminados, creará la restricción para usted.
En su tabla, por ejemplo, podría ser:
Creará la restricción para el valor predeterminado 100.
Si en cambio lo creas así
Luego obtienes una restricción bien nombrada que es más fácil de referencia cuando estás alterando dicha tabla.
Puede combinar esas 2 últimas declaraciones para modificar la columna y nombrar la restricción en una línea (de todos modos, debe hacerlo si es una tabla existente)
fuente
Como la restricción tiene un nombre impredecible, puede escribir un script especial ( DropConstraint ) para eliminarlo sin saber su nombre (se probó en EF 6.1.3):
fuente
MS SQL Studio se encarga de eliminar la columna, pero si necesita eliminar la restricción mediante programación, aquí hay una solución simple
Aquí hay un fragmento de código que soltará una columna con una restricción predeterminada:
Simplemente reemplace TableName y ColumnName con los valores apropiados. Puede ejecutar esto de manera segura incluso si la columna ya se ha descartado.
Bonificación : Aquí está el código para soltar claves foráneas y otros tipos de restricciones.
Blog
fuente
Cuando intentamos soltar una columna de la que depende, vemos este tipo de error:
elimine la restricción que depende de esa columna con:
Ejemplo:
Restricción de caída (DF__Empleados__Colf__1273C1CD):
Entonces puedes soltar la columna:
fuente
Solución:
abrir tabla de base de datos -> expandir tabla -> expandir restricciones y ver esto
fuente
Tuve este error al intentar ejecutar una migración para solucionarlo. Cambié el nombre de la columna y volví a generar la migración usando
en la consola del administrador de paquetes. Entonces pude correr
exitosamente.
fuente