12

TLDR के भीतर पूर्ण टेक्स्ट सूचकांक बनाएं; आप इकाई फ्रेमवर्क 5 कोडित माइग्रेशनएंटिटी फ्रेमवर्क कोडेड माइग्रेशन

का उपयोग कर एक पूर्ण पाठ अनुक्रमणिका कैसे जोड़ते हैं मुझे एंटीटी फ्रेमवर्क माइग्रेशन का उपयोग करके डेटाबेस में पूर्ण टेक्स्ट इंडेक्स जोड़ने में समस्याएं आ रही हैं। इसे शुरुआत से वहां होना चाहिए, इसलिए मैं InitialCreate माइग्रेशन को संशोधित करने का प्रयास कर रहा हूं जो इसे जोड़ने के लिए स्वचालित रूप से जेनरेट किया गया था।

क्योंकि DbMigrations API के माध्यम से ऐसा करने का कोई तरीका नहीं है, मैंने 'अप' कोड के अंत में इनलाइन एसक्यूएल चलाने का प्रयास किया है।

Sql("create fulltext catalog AppNameCatalog;"); 
Sql("create fulltext index on Document (Data type column Extension) key index [PK_dbo.Document] on AppNameCatalog;"); 

जब यह चलाता है सब कुछ ठीक हो जाता है बनाया है जब तक यह इस एसक्यूएल तक पहुँच जाता है, तो यह एसक्यूएल त्रुटि 'की प्रतिलिपि प्राप्त सूची बयान बनाएँ एक उपयोगकर्ता लेन-देन के अंदर नहीं किया जा सकता फेंकता है। '। जो उम्मीद की जाती है और डिजाइन के रूप में काम कर रही है।

शुक्रिया एसक्यूएल() में एक अधिभार है जो आपको माइग्रेशन लेनदेन के बाहर एसक्यूएल चलाने की अनुमति देता है। बहुत बढ़िया! मैंने सोचा।

Sql("create fulltext catalog AppNameCatalog;", true); 
Sql("create fulltext index on Document (Data type column Extension) key index [PK_dbo.Document] on AppNameCatalog;", true); 

लेकिन कम और एक नया टाइमआउट त्रुटि 'टाइमआउट की समय सीमा समाप्त में यह करने के लिए (ऊपर देखें) परिणाम कोड को संशोधित करने निहारना। ऑपरेशन पूरा होने से पहले समय समाप्ति अवधि समाप्त हो गई है या सर्वर प्रतिक्रिया नहीं दे रहा है। '

मैंने एसक्यूएल को थूकने और मैन्युअल रूप से चलाने की कोशिश की है और यह ठीक काम करता है। मैंने जेनरेट किए गए एसक्यूएल को लेनदेन के बाहर चलाने के बिना और बिना किसी अंतर के भी अलग कर दिया है और वे समान हैं इसलिए एसक्यूएल को निष्पादित करने के तरीके में कुछ होना चाहिए।

किसी भी मदद के लिए अग्रिम धन्यवाद!

उत्तर

7

मुझे एक ही समस्या थी। मेरा प्रारंभिक क्रिएट माइग्रेशन एक टेबल बना रहा था और फिर ओवरलोडेड एसक्यूएल() का उपयोग करके उस तालिका में एक पूर्ण टेक्स्ट इंडेक्स जोड़ने का प्रयास कर रहा था ताकि यह इंगित किया जा सके कि इसे लेनदेन के बाहर निष्पादित करने की आवश्यकता है। मुझे टाइमआउट त्रुटि भी मिल रही थी और मुझे संदेह है कि यह थ्रेड डेडलॉक के कारण है।

मैं इसे कुछ परिदृश्यों में CreateTable() के बजाय एसक्यूएल() कॉल का उपयोग करके और पूर्ण टेक्स्ट टेक्स्ट कैटलॉग बनाने और पूर्ण टेक्स्ट इंडेक्स स्टेटमेंट को एकल एसक्यूएल() कॉल में बनाकर काम कर सकता हूं। हालांकि, यह बहुत विश्वसनीय नहीं था। कभी-कभी यह काम करेगा और कभी-कभी यह एक ही टाइमआउट त्रुटि के साथ विफल हो जाएगा।

मुझे मिला एकमात्र विश्वसनीय समाधान कैटलॉग और पूर्ण पाठ अनुक्रमणिका को एक अलग माइग्रेशन में स्थानांतरित करना था।

+0

अरे, इनपुट के लिए धन्यवाद। क्या यह एक अलग माइग्रेशन के रूप में काम करता था? –

+1

यिप, मुझे यह एक अलग माइग्रेशन के रूप में काम कर रहा है। तालिका निर्माण InitialCreate माइग्रेशन में होता है और पूर्ण पाठ कैटलॉग और इंडेक्स एक अलग माइग्रेशन में बनाए जाते हैं जिसका उद्देश्य InitialCreate माइग्रेशन के बाद किया जाना है। – jspaey

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