PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

इकाई फ्रेमवर्क कोर - केस संवेदनशील या केस असंवेदनशील है?

यह EF कोर के पुराने संस्करणों के मामले में हुआ करता था। अब string.Contains केस संवेदनशील है, और उदाहरण के लिए sqlite के लिए यह sqlite फ़ंक्शन `instr ()' (मैं पोस्टग्रेस्क्ल के लिए नहीं जानता) पर मैप करता हूं।

यदि आप स्ट्रिंग्स की तुलना केस-असंवेदनशील तरीके से करना चाहते हैं, तो आपके पास कार्य करने के लिए DbFunctions हैं।

context.Counties.Where(x => EF.Functions.Like(x.Name, $"%{keyword}%")).ToList();

@Gert को अपडेट करें:

प्रश्न में धारणा का एक हिस्सा गलत है। string.Contains LIKE expression . में परिवर्तित नहीं होता है भले ही यह एफई कोर संस्करणों <=1.0 (मुझे लगता है) में मामला हुआ करता था।

  • SQLServer में string.contains CHARINDEX() . में कनवर्ट करता है , oracle और sqlite में instr() . में जो डिफ़ॉल्ट रूप से केस सेंसिटिव होते हैं UNLESS db या कॉलम कॉलेशन को अन्यथा परिभाषित किया जाता है (फिर से, मुझे postgresql के बारे में पता नहीं है)।
  • सभी मामलों में EF.Functions.Like() एक SQL LIKE . में कनवर्ट करता है अभिव्यक्ति जो डिफ़ॉल्ट रूप से केस-असंवेदनशील है जब तक कि डीबी या कॉलम संयोजन को अन्यथा परिभाषित नहीं किया जाता है।

तो हाँ यह सब संयोजन के लिए नीचे जाता है लेकिन - अगर मैं गलत हूं तो मुझे सुधारें - एक तरह से कोड केस-संवेदी/असंवेदनशील खोज पर प्रभाव डाल सकता है, जिसके आधार पर आप उपरोक्त में से किसी एक विधि का उपयोग करते हैं।

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

मूल प्रश्न पर वापस जाना आपके पास इस केस-असंवेदनशील खोज को करने के लिए कम से कम 2 विकल्प हैं यदि भविष्य में रिलीज में 3 नहीं:

  1. इस ट्रिक का उपयोग करके DbContext.OnModelCreating() का उपयोग करके निर्माण पर कॉलम कोलाज निर्दिष्ट करें
  2. अपना string.Contains बदलें द्वारा EF.Functions.Like()
  3. या अभी भी चर्चा में एक आशाजनक विशेषता की प्रतीक्षा करें:EF.Functions.Collate() समारोह


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में अल्पविराम के साथ प्रारूप संख्या

  2. Sysbench का उपयोग करके PostgreSQL के प्रदर्शन को बेंचमार्क कैसे करें

  3. PostgreSQL में पेजिंग के लिए कर्सर का उपयोग करना

  4. PostgreSQL में डिफ़ॉल्ट मान के रूप में UTC में वर्तमान समय का उपयोग करना

  5. मेरा पसंदीदा पोस्टग्रेएसक्यूएल एक्सटेंशन - भाग दो