2010-03-23 8 views
41

FluentMigrator का उपयोग कर का डिफ़ॉल्ट निर्माण .AsString() का उपयोग nvarchar(255) पर करता है। nvarchar(MAX) के कॉलम को बनाने के लिए क्या कोई आसान तरीका है (फ्लुएंटमिगर कोड को संशोधित करने से पहले)?क्या मैं FluentMigrator का उपयोग कर nvarchar (MAX) का कॉलम बना सकता हूं?

उत्तर

55

आप .AsMaxString() के भीतर

.AsString (Int32.MaxValue) रैप करने के लिए एक विस्तार विधि बना सकते हैं जैसे

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

ठीक है, मैंने इसे पाया। असल में, उपयोग करें। एसस्ट्रिंग (Int32.MaxValue)। अफ़सोस की बात है कि वहाँ एक .AsMaxString() विधि नहीं है, लेकिन मुझे लगता है कि यह काफी आसान में डालने के लिए है ...

4

यदि आप अक्सर समान सेटिंग्स या कॉलम के समूह के साथ कॉलम/टेबल बनाते हैं, तो आपको अपने माइग्रेशन के लिए एक्सटेंशन विधियां बनाना चाहिए!

उदाहरण के लिए, मेरी टेबल के लगभग हर एक CreatedAt और 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(); 
    } 
} 

इसी तरह, एक लगभग हर मेरी टेबल के एक पूर्णांक है 'आईडी' नामक प्राथमिक कुंजी, इसलिए मुझे लगता है कि मैं हमेशा उस आईडी को जोड़ने के लिए Table.CreateWithId("Foos") जोड़ने जा रहा हूं। यकीन नहीं है ... मैं वास्तव में अभी FluentMigrator का उपयोग करना शुरू कर दिया, लेकिन जब भी संभव हो, आपको हमेशा रिफैक्टरिंग करनी चाहिए!

नोट: आप अपने माइग्रेशन के लिए सहायक/विस्तार तरीकों करते हैं, तो आप क्या उन तरीकों करना चाहिए कभी नहींकभीकभी परिवर्तन। यदि आप करते हैं, तो कोई आपके माइग्रेशन को चलाने का प्रयास कर सकता है और चीजें विस्फोट कर सकती हैं क्योंकि माइग्रेशन # 1 बनाने के लिए उपयोग की जाने वाली सहायक विधिएं पहले की तुलना में अलग-अलग काम करती हैं। https://github.com/schambers/fluentmigrator/blob/master/src/FluentMigrator/Builders/Create/Column/CreateColumnExpressionBuilder.cs

15

आप AsCustom("nvarchar(max)") का उपयोग करें और विस्तार

करने के लिए इसे पैक कर सकते हैं:

यहाँ आप सहायक तरीकों बनाने बैठाना यह मदद करता है कॉलम बनाने के लिए कोड है

संबंधित मुद्दे