هل يمكنني إنشاء عمود من Nvarchar (Max) باستخدام FluentMigrator؟
-
21-09-2019 - |
سؤال
استخدام FluentMigrator, ، الخلق الافتراضي ل Column
استخدام .AsString()
ينتج عنه nvarchar(255)
. هل هناك طريقة بسيطة (قبل تعديل رمز FluentMigrator) لإنشاء عمود من النوع nvarchar(MAX)
?
المحلول
يمكنك إنشاء طريقة تمديد للالتفاف .ASSTRING (int32.maxvalue) داخل .asmaxString ()
على سبيل المثال
internal static class MigratorExtensions
{
public static ICreateTableColumnOptionOrWithColumnSyntax AsMaxString(this ICreateTableColumnAsTypeSyntax createTableColumnAsTypeSyntax)
{
return createTableColumnAsTypeSyntax.AsString(int.MaxValue);
}
}
نصائح أخرى
حسنًا ، لقد وجدت ذلك. في الأساس ، استخدم .ASSTRING (int32.maxvalue). من المؤسف أنه لا توجد طريقة .asaxaxstring () ، لكنني أعتقد أنه من السهل وضع ...
يمكنك استخدام AsCustom("nvarchar(max)")
وحزمه للتمديد
إذا كنت تقوم في كثير من الأحيان بإنشاء أعمدة/جداول مع نفس الإعدادات أو مجموعات الأعمدة ، فيجب عليك إنشاء طرق تمديد لترحيلك!
على سبيل المثال ، قام كل واحد من طاولاتي تقريبًا بإنشاء أعمدة محدثة و updatedat ، لذلك قمت بتجميع طريقة تمديد صغيرة حتى أتمكن من القول:
Create.Table("Foos").
WithColumn("a").
WithTimestamps();
أنا فكر في لقد قمت بإنشاء طريقة التمديد بشكل صحيح ... أعرف أنها تعمل ، لكن FluentMigrator لديه ملف كثيرا من الواجهات ... هنا:
public static class MigrationExtensions {
public static ICreateTableWithColumnSyntax WithTimestamps(this ICreateTableWithColumnSyntax root) {
return root.
WithColumn("CreatedAt").AsDateTime().NotNullable().
WithColumn("UpdatedAt").AsDateTime().NotNullable();
}
}
وبالمثل ، فإن كل واحد تقريبًا من طاولاتي لديه مفتاح أساسي int يسمى "ID" ، لذلك أعتقد أنني سأضيف Table.CreateWithId("Foos")
لإضافة هذا المعرف دائمًا. لست متأكدًا ... لقد بدأت للتو في استخدام FluentMigrator اليوم ، ولكن يجب أن تكون دائمًا إعادة تهيئة عندما يكون ذلك ممكنًا!
ملاحظة: إذا قمت بعمل طرق مساعد/تمديد لترحيلك ، فيجب عليك ذلك مطلقا أبدًا أبدًا تغيير ما تفعله هذه الأساليب. إذا قمت بذلك ، يمكن لشخص ما محاولة تشغيل ترحيلك ويمكن أن تنفجر الأشياء لأن أساليب المساعد التي استخدمتها لإنشاء الترحيل رقم 1 تعمل بشكل مختلف الآن عما كانت عليه سابقًا.
فيما يلي رمز إنشاء الأعمدة في حالة تساعدك على إنشاء أساليب مساعد: https://github.com/schambers/fluentmigrator/blob/master/src/fluentmigrator/builders/create/column/createcolumnexpressionbuilder.cs