programing

FluentMigrator를 사용하여 nvarchar (MAX) 열을 만들 수 있습니까?

projobs 2021. 1. 18. 07:31
반응형

FluentMigrator를 사용하여 nvarchar (MAX) 열을 만들 수 있습니까?


사용 FluentMigrator 하는 기본 생성 Column사용 .AsString()결과를 nvarchar(255). FluentMigrator 코드를 수정하기 전에 유형의 열을 만드는 간단한 방법이 nvarchar(MAX)있습니까?


.AsMaxString () 내에서 .AsString (Int32.MaxValue)를 래핑하는 확장 메서드를 만들 수 있습니다.

예 :

internal static class MigratorExtensions
{
    public static ICreateTableColumnOptionOrWithColumnSyntax AsMaxString(this ICreateTableColumnAsTypeSyntax createTableColumnAsTypeSyntax)
    {
        return createTableColumnAsTypeSyntax.AsString(int.MaxValue);
    }
}

네, 찾았습니다. 기본적으로 .AsString (Int32.MaxValue)를 사용합니다. 유감스럽게도 .AsMaxString () 메서드가 없지만 쉽게 넣을 수 있다고 생각합니다 ...


AsCustom("nvarchar(max)")확장에 사용 하고 포장 할 수 있습니다.


동일한 설정 또는 열 그룹으로 열 / 테이블을 자주 만드는 경우 마이그레이션을위한 확장 메서드를 만들어야합니다!

예를 들어, 거의 모든 테이블에 CreatedAt 및 UpdatedAt DateTime 열이 있으므로 약간의 확장 메서드를 작성하여 다음과 같이 말할 수 있습니다.

Create.Table("Foos").
    WithColumn("a").
    WithTimestamps();

내가 생각하는 내가 제대로 확장 방법을 만들어 ... 나는 그것이 작동 알고 있지만 FluentMigrator는이 LOT 여기있다 ... 인터페이스를 :

public static class MigrationExtensions {
    public static ICreateTableWithColumnSyntax WithTimestamps(this ICreateTableWithColumnSyntax root) {
        return root.
            WithColumn("CreatedAt").AsDateTime().NotNullable().
            WithColumn("UpdatedAt").AsDateTime().NotNullable();
    }
}

마찬가지로 거의 모든 테이블에는 'Id'라는 int 기본 키가 있으므로 Table.CreateWithId("Foos")항상 해당 ID를 추가하여 나를 위해 추가 것이라고 생각 합니다. 확실하지 않습니다 ... 실제로 오늘 FluentMigrator를 사용하기 시작했지만 가능하면 항상 리팩토링해야합니다!

참고 : 당신이 당신의 마이그레이션을위한 메이크업 도우미 / 확장 방법을 할 경우, 당신이해야 결코 이제까지 이제까지 그 방법이 무엇 변경할 수 없습니다. 그렇게하면 마이그레이션 # 1을 만드는 데 사용한 도우미 메서드가 이전과 다르게 작동하기 때문에 누군가 마이그레이션을 실행하려고 시도 할 수 있고 상황이 폭발 할 수 있습니다.

다음은 도우미 메서드를 만드는 데 도움이되는 열을 만드는 코드입니다. https://github.com/schambers/fluentmigrator/blob/master/src/FluentMigrator/Builders/Create/Column/CreateColumnExpressionBuilder.cs

참조 URL : https://stackoverflow.com/questions/2496695/can-i-create-a-column-of-nvarcharmax-using-fluentmigrator

반응형