231 votes

L'objet 'DF__*' dépend de la colonne '*' - Changer int en double

Fondamentalement, j'ai une table dans ma base de données EF avec les propriétés suivantes :

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 double Rating { get; set; }
public virtual ICollection Categories { get; set; }

Ça fonctionne bien cependant lorsque je change l'int de Rating pour être un double, j'obtiens l'erreur suivante lors de la mise à jour de la base de données :

L'objet 'DF_Movies_Rating__48CFD27E' dépend de la colonne 'Rating'. ALTER TABLE ALTER COLUMN Rating a échoué car un ou plusieurs objets accèdent à cette colonne.

Quel est le problème ?

4voto

Arup Mahapatra Points 41

Solution :

ouvrir la table de la base de données -> étendre la table -> étendre les contraintes et voir ceci

capture d'écran

3voto

En supprimant les colonnes de plusieurs tables, j'ai rencontré l'erreur suivante concernant les contraintes par défaut. Un problème similaire apparaît si vous devez changer le type de données d'une colonne.

L'objet 'DF_TableName_ColumnName' dépend de la colonne 'ColumnName'.

Pour résoudre cela, je dois d'abord supprimer toutes ces contraintes en utilisant la requête suivante :

DECLARE @sql NVARCHAR(max)=''     
SELECT @SQL += 'Alter table ' + Quotename(tbl.name) + '  DROP constraint ' + Quotename(cons.name) + ';'
 FROM SYS.DEFAULT_CONSTRAINTS cons 
 JOIN   SYS.COLUMNS col ON col.default_object_id = cons.object_id
 JOIN   SYS.TABLES tbl ON tbl.object_id = col.object_id
 WHERE  col.[name] IN ('Column1','Column2')

--PRINT @sql
EXEC Sp_executesql @sql 

Ensuite, j'ai supprimé toutes ces colonnes (ma requête, non mentionnée dans cette question)

DECLARE @sql NVARCHAR(max)='' 
SELECT @SQL += 'Alter table ' + Quotename(table_catalog)+ '.' + Quotename(table_schema) + '.'+ Quotename(TABLE_NAME) 
               + '  DROP column ' + Quotename(column_name) + ';'
FROM   information_schema.columns where COLUMN_NAME IN ('Column1','Column2')  
--PRINT @sql
EXEC Sp_executesql @sql 

J'ai posté ceci ici au cas où quelqu'un rencontrerait le même problème.

Bon codage !

-1voto

kirsten g Points 959

J'ai eu cette erreur en essayant d'exécuter une migration pour y remédier, j'ai renommé la colonne et régénéré la migration en utilisant

add-migration migrationname -force

dans la console du gestionnaire de packages. J'ai ensuite pu exécuter

update-database

avec succès.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X