के साथ डुप्लिकेट कुंजी डालने को अनदेखा करें मैं एंटिटी फ्रेमवर्क कोड प्रथम के साथ एएसपी.नेट एमवीसी 4 का उपयोग कर रहा हूं। मेरे पास "उपयोगकर्ता" नामक एक तालिका है, प्राथमिक कुंजी "UserId" के साथ। इस तालिका में 200,000+ प्रविष्टियां हो सकती हैं।इकाई फ्रेमवर्क
मुझे अन्य 50 उपयोगकर्ताओं को सम्मिलित करने की आवश्यकता है। मैं इसे
foreach(User user in NewUsers){
context.Add(user);
}
dbcontext.SaveChanges();
समस्या यह है कि, इनमें से एक या अधिक उपयोगकर्ता पहले ही डीबी में मौजूद हो सकते हैं। अगर मैं उन्हें जोड़ता हूं और फिर सहेजने का प्रयास करता हूं, तो यह एक त्रुटि फेंकता है और वैध में से कोई भी जोड़ा नहीं जाता है। मैं यह करने के लिए कोड को संशोधित कर सकता हूं:
foreach(User user in NewUsers){
if(dbcontext.Users.FirstOrDefault(u => u.UserId) == null)
{
dbcontext.Users.Add(user);
}
}
dbcontext.SaveChanges();
जो काम करेगा। समस्या यह है कि, उसे 200,000+ प्रविष्टि तालिका पर 50 बार एक क्वेरी चलाने की आवश्यकता है। तो मेरा सवाल यह है कि, इन उपयोगकर्ताओं को डालने का सबसे प्रदर्शन करने योग्य तरीका क्या है, किसी भी डुप्लिकेट को अनदेखा कर रहा है?
शायद 'context.AddOrUpdate (उपयोगकर्ता);' क्या आप –
@OO चाहते यह वास्तव में उन नहीं है, यह एक एपीआई से खींचा जा रहा अलग डेटा। एपीआई एकाधिक अनुक्रमिक कॉल में एक ही डेटा प्रदान कर सकता है या नहीं। मैंने अभी "उपयोगकर्ता" का उपयोग किया क्योंकि यह पहला उदाहरण था जिसे मैंने सोचा था। – Jordan
मुझे एक ही समस्या थी और मुझे पर्याप्त समाधान नहीं मिला। इसके लिए मान्य परिदृश्य हैं, जैसे कि सीएसवी से थोक आयात करते समय जहां ईमेल पते को मौजूदा डेटाबेस में अद्वितीय होना आवश्यक है। स्मृति में सभी मौजूदा कुंजियों को पढ़ना प्रदर्शन के लिए अच्छा प्रतीत नहीं होता है, न ही प्रत्येक प्रविष्टि को अलग से जोड़ रहा है। ऐसा लगता है कि इन्सर्ट इग्नोर की तरह कुछ जरूरी है। – acarlon