LINQ एक क्वेरी है प्रौद्योगिकी, लेकिन मुझे लगता है कि हम जानते हैं कि आपका क्या मतलब है; हो सकता है कि आप थोड़ा और विशिष्ट होना चाहें कि यह LINQ-to-SQL या Entity Framework है या नहीं। आप यह भी स्पष्ट करना चाहेंगे कि आपके मामले में "थोक" का क्या अर्थ है... 10-100 रिकॉर्ड के लिए आप 10,000 रिकॉर्ड्स के लिए एक अलग उत्तर का उपयोग कर सकते हैं (जहां SqlBulkCopy
एक स्टेजिंग टेबल में और डीबी पर आयात करने के लिए एक संग्रहित प्रक्रिया सबसे अच्छा विचार होगा)।
अपेक्षाकृत कम संख्या के लिए - रिकॉर्ड खोजने के लिए बस अपने ORM टूल का उपयोग करें - उदाहरण के लिए LINQ-to-SQL (शायद एक फैले हुए क्रमिक लेनदेन के साथ) - और चित्रण के लिए C# का उपयोग करना (लूप और कैश दिखाने के लिए अपडेट किया गया मजबूत> ):
Dictionary<string,Tag> knownTags = new Dictionary<string,Tag>();
foreach(... your data ...) {
Tag tag;
if(!knownTags.TryGetValue(tagName, out tag)) {
tag = ctx.Tags.SingleOrDefault(t => t.Name == tagName);
if(tag == null) {
tag = new Tag { Name = tagName };
ctx.Tags.InsertOnSubmit(tag);
}
knownTags.Add(tagName, tag);
}
// insert video tag
}
ctx.SubmitChanges();
असल में, प्रदर्शन कारणों से मुझे आश्चर्य है कि यह उन अवसरों में से एक हो सकता है जहां प्राकृतिक कुंजी समझ में आती है - यानी Tag
का उपयोग करें (varchar
) प्राथमिक कुंजी के रूप में, और इसे (विदेशी कुंजी के रूप में) VideoTags
. में डुप्लिकेट करें - तो आपको Tag
. में शामिल होने की आवश्यकता नहीं है टेबल हर समय।
यदि संख्याएँ बड़ी हैं, तो SqlBulkCopy
. का उपयोग करना बहुत आसान है; बस डेटा को DataTable
. में डालें और इसे ऊपर धकेलें, फिर TSQL में काम करें।