나는 이것에 간단한 해결책이 있다고는 생각하지 않지만, 당신이 할 수있는 일에 대해 생각해 보았습니다 : 커스텀 마이그레이션 생성자를 만드십시오.
마이그레이션 생성기는 마이그레이션 코드 파일에서 데이터베이스에서 실행되는 SQL 스크립트를 만드는 구성 요소입니다. 스크린 샷을 기반으로 SQL Server가 있다고 가정합니다.
public class NoIndexGenerator : SqlServerMigrationSqlGenerator
{
protected override void Generate(CreateIndexOperation createIndexOperation)
{
if (!createIndexOperation.IsClustered)
{
return;
}
}
}
는 그런 다음에이 구성 요소를 등록해야합니다 :이 경우, 당신은 단순히 인덱스가 클러스터되지 않은 경우, 아무것도 스크립트에 기록되지 않도록 인덱스 생성 작업을 재정의하는 사용자 지정 SQL 생성기를 쓸 수 있습니다 마이그레이션의 Configuration
클래스 : 당신이 Add-Migration
을 실행하면
internal sealed class Configuration : DbMigrationsConfiguration<MyCtx>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
// Add this line to register the sql generator
this.SetSqlGenerator("System.Data.SqlClient", new NoIndexGenerator());
}
}
지금, 당신은 거기에 CreateIndexOperation으로, 일반 마이그레이션 파일을해야합니다. 그러나 Update-Database
을 실행하면 클러스터되지 않은 인덱스가 만들어지지 않습니다. Update-Database -Script
을 실행하면 이것을 확인할 수도 있습니다. 결과 스크립트에는 클러스터되지 않은 인덱스가 없습니다.
원하는 경우 파이프 라인에서 더 높은 곳으로 이동하여 사용자 지정 C# 마이그레이션 스캐 폴더를 만들 수 있습니다. 당신이 Add-Migration
를 실행하는 경우 CreateIndex의 작업에서 사라집니다 지금
internal sealed class Configuration : DbMigrationsConfiguration<MyCtx>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
// Add this line to register the C# code generator
this.CodeGenerator = new NoIndexMigrationCodeGenerator();
}
}
:이 같은 Configuration
클래스에 등록 할 수 있습니다, 그리고
internal class NoIndexMigrationCodeGenerator : CSharpMigrationCodeGenerator
{
protected override void Generate(CreateIndexOperation createIndexOperation, IndentedTextWriter writer)
{
if (!createIndexOperation.IsClustered)
{
return;
}
}
}
: 그것은 SQL 생성기와 같은 논리를 적용 생성 된 마이그레이션 cs 파일도 마찬가지입니다.
나는 두 번째 솔루션으로 갈 것입니다 (마이그레이션 cs 파일에는 CreateIndex 작업이 있지만 SQL 스크립트에는없는 코드를 읽는 것이 혼란 스러울 수 있지만 궁극적으로는 선택 사항입니다). :)
Generate()
메서드의 createIndexOperation
매개 변수의 다른 속성으로 재생하면보다 정교한 인덱스 필터링을 구현할 수 있습니다.
원하는 경우 매개 변수가 DropCreateIndexOperation
인 Generate 메서드를 재정의 할 수도 있지만 인덱스가 'drop-if-exists'패턴으로 삭제되기 때문에 이것이 필요하지 않다고 생각합니다.
첫째,이 문서를 살펴 // sqlskills. com/BLOGS/KIMBERLY/post/SQL-Server-stop-putting-foreign-key-columns.aspx) SQL 쿼리를 작성하여 마이그레이션에 실행할 수 있습니다. – Saeed