EF Code First Fluent API로는 불가능합니다. 데이터베이스에서 외래 키 제약 조건을 만들려면 항상 하나 이상의 탐색 속성이 필요합니다.
Code First 마이그레이션을 사용하는 경우 패키지 관리자 콘솔 ( add-migration SomeNewSchemaName
) 에서 새 코드 기반 마이그레이션을 추가하는 옵션이 있습니다 . 모델 또는 매핑으로 변경 한 경우 새 마이그레이션이 추가됩니다. 아무것도 변경하지 않은 경우 add-migration -IgnoreChanges SomeNewSchemaName
. 이 경우 마이그레이션에는 비어있는 Up
및 Down
메소드 만 포함됩니다 .
그런 Up
다음 다음을 추가하여 메서드를 수정할 수 있습니다 .
public override void Up()
{
AddForeignKey("ChildTableName", "ParentId", "ParentTableName", "Id",
cascadeDelete: true);
CreateIndex("ChildTableName", "ParentId");
}
이 마이그레이션을 실행하면 ( update-database
패키지 관리 콘솔에서) 다음과 유사한 SQL 문이 실행됩니다 (SQL Server의 경우).
ALTER TABLE [ChildTableName] ADD CONSTRAINT [FK_SomeName]
FOREIGN KEY ([ParentId]) REFERENCES [ParentTableName] ([Id])
CREATE INDEX [IX_SomeName] ON [ChildTableName] ([ParentId])
또는 마이그레이션없이 다음을 사용하여 순수 SQL 명령을 실행할 수 있습니다.
context.Database.ExecuteSqlCommand(sql);
여기서는 context
파생 된 컨텍스트 클래스의 인스턴스이며 sql
위의 SQL 명령 (문자열)입니다.
이 모든 EF에는 ParentId
관계를 설명하는 외래 키라는 단서가 없습니다 . EF는이를 일반 스칼라 속성으로 만 간주합니다. 어떻게 든 위의 모든 것은 SQL 관리 도구를 열고 수동으로 제약 조건을 추가하는 것에 비해 더 복잡하고 느린 방법입니다.