개체 'DF__*'이(가) '*' 열에 종속됨 - int를 이중으로 변경
기본적으로 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; }
정상적으로 동작하지만 Rating(등급)의 int를 double(더블)로 변경하면 데이터베이스 업데이트 시 다음 오류가 발생합니다.
개체 'DF_Movies_Rating__48CFD27E'는 'Rating' 열에 종속됩니다.하나 이상의 개체가 이 열에 액세스하기 때문에 ALTER TABLE ALTER COLUMN 등급이 실패했습니다.
뭐가 문제야?
이것을 시험해 보세요.
필드 유형을 변경하기 전에 제약 조건 DF_Movies_Rating__48CFD27E를 제거하십시오.
제약조건은 일반적으로 DBMS(SQL Server)에 의해 자동으로 생성됩니다.
테이블과 관련된 제약조건을 표시하려면 오브젝트 탐색기에서 테이블 속성을 펼친 후 다음과 같이 [Constraints]카테고리를 펼칩니다.
필드 유형을 변경하기 전에 구속조건을 제거해야 합니다.
제약이 어디서 비롯됐는지 설명하기 위해 이 말을 덧붙입니다.댓글로 하려고 했는데 거기서는 편집이 잘 안 돼:-/
기본값이 있는 컬럼으로 테이블을 작성(또는 변경)하면 제약조건이 생성됩니다.
테이블에는 다음과 같은 것이 있습니다.
CREATE TABLE Movie (
...
rating INT NOT NULL default 100
)
그러면 기본값 100에 대한 제약 조건이 생성됩니다.
대신 이렇게 작성하면
CREATE TABLE Movie (
name VARCHAR(255) NOT NULL,
rating INT NOT NULL CONSTRAINT rating_default DEFAULT 100
);
그러면 해당 표를 변경할 때 참조하기 쉬운 이름 있는 제약 조건을 얻을 수 있습니다.
ALTER TABLE Movie DROP CONSTRAINT rating_default;
ALTER TABLE Movie ALTER COLUMN rating DECIMAL(2) NOT NULL;
-- sets up a new default constraint with easy to remember name
ALTER TABLE Movie ADD CONSTRAINT rating_default DEFAULT ((1.0)) FOR rating;
마지막 두 문을 결합하여 열을 변경하고 제약 조건을 한 줄로 지정할 수 있습니다(기존 테이블인 경우 반드시 지정해야 함).
은 ★★★입니다.tsql
ALTER TABLE yourtable DROP CONSTRAINT constraint_name -- DF_Movies_Rating__48CFD27E
완성도를 높이기 위해 @Joe Taras의 코멘트를 답변으로 제시합니다.
제약조건에는 예측할 수 없는 이름이 있으므로 이름을 모르는 상태에서 특수 스크립트(DropConstraint)를 작성하여 제거할 수 있습니다(EF 6.1.3에서 테스트됨).
public override void Up()
{
DropConstraint();
AlterColumn("dbo.MyTable", "Rating", c => c.Double(nullable: false));
}
private void DropConstraint()
{
Sql(@"DECLARE @var0 nvarchar(128)
SELECT @var0 = name
FROM sys.default_constraints
WHERE parent_object_id = object_id(N'dbo.MyTable')
AND col_name(parent_object_id, parent_column_id) = 'Rating';
IF @var0 IS NOT NULL
EXECUTE('ALTER TABLE [dbo].[MyTable] DROP CONSTRAINT [' + @var0 + ']')");
}
public override void Down()
{
AlterColumn("dbo.MyTable", "Rating", c => c.Int(nullable: false));
}
종속된 열을 삭제하려고 하면 다음과 같은 오류가 나타납니다.
개체 'DF__*'은 열 '에 종속되어 있습니다.
다음과 같이 해당 열에 종속된 구속조건을 삭제합니다.
ALTER TABLE TableName DROP CONSTRAINT dependent_constraint;
예:
메시지 5074, 레벨 16, 스테이트 1, 라인 1
개체 'DF__Employes__Colf__1273C1'CD'는 'Colf' 열에 종속됩니다.
메시지 4922, 레벨 16, 스테이트 9, 라인 1
하나 이상의 개체가 이 열에 액세스하기 때문에 ALTER TABLE DROP COLUMN Colf가 실패했습니다.
드롭 제약(DF__Employes__Colf__1273C1)CD):
ALTER TABLE Employees DROP CONSTRAINT DF__Employees__Colf__1273C1CD;
그런 다음 열을 드롭할 수 있습니다.
Alter Table TableName Drop column ColumnName
해결책:
open database table -> expand table -> 제약조건을 전개하여 다음을 참조해 주십시오.
여러 테이블에서 열을 삭제하는 동안 다음과 같은 기본 제약 조건 오류가 발생했습니다.열의 데이터 유형을 변경해야 하는 경우에도 유사한 문제가 나타납니다.
개체 'DF_TableName_ColumnName'은 'ColumnName' 열에 종속되어 있습니다.
이 문제를 해결하려면 먼저 다음 쿼리를 사용하여 모든 제약을 해제해야 합니다.
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
그 후 모든 컬럼을 삭제했습니다(요건, 이 질문에는 기재되어 있지 않습니다).
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
누군가 같은 문제를 발견할까 봐 여기에 글을 올렸습니다.
해피 코딩!
이 에러를 회피하기 위해 이행을 실행하려고 할 때 오류가 발생했습니다.컬럼의 이름을 변경하고 다음 명령을 사용하여 이행을 다시 생성했습니다.
add-migration migrationname -force
패키지 매니저 콘솔로 이동합니다.나는 그때 달릴 수 있었다.
update-database
성공했습니다.
언급URL : https://stackoverflow.com/questions/19460912/the-object-df-is-dependent-on-column-changing-int-to-double
'programing' 카테고리의 다른 글
PowerShell은 상수를 지원합니까? (0) | 2023.04.08 |
---|---|
Get-Child Item을 사용하여 디렉토리만 가져오려면 어떻게 해야 합니까? (0) | 2023.04.08 |
현재 PowerShell 스크립트의 위치를 확인하는 가장 좋은 방법은 무엇입니까? (0) | 2023.04.08 |
Join-Path를 사용하여 3개 이상의 문자열을 하나의 파일 경로에 결합하려면 어떻게 해야 합니까? (0) | 2023.04.08 |
링크와 같은 기능을 하는HTML 버튼을 작성하려면 어떻게 해야 하나요? (0) | 2023.04.08 |