2015-03-04 16 views
5

एक सूची 1 लाख उस में आइटम नहीं है कि dapper.net का उपयोग कर रहा एसक्यूएल सर्वर 2014सबसे अच्छा तरीका है

using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["myConnString"])) 
{ 

    conn.Execute("INSERT statement here", insertList); 

} 

insertList में एक मेज के रिकॉर्ड डालने के लिए निम्नलिखित कोड का उपयोग कर रहा है थोक आवेषण क्या करना है। मैंने एक आई 5 डेस्कटॉप पर इस सम्मिलन का परीक्षण किया और उसी मशीन पर SQL सर्वर में लाखों रिकॉर्ड डालने में लगभग 65 मिनट लग गए। मुझे यकीन नहीं है कि दृश्यों के पीछे आक्रमण कैसे कर रहा है। मैं निश्चित रूप से डेटाबेस कनेक्शन को दस लाख बार खोलना और बंद नहीं करना चाहता!

क्या यह डैपर में थोक आवेषण करने का सबसे अच्छा तरीका है या क्या मुझे कुछ और करने की कोशिश करनी चाहिए या एंटरप्राइज़ लाइब्रेरी का उपयोग करके सादे ADO.Net के साथ जाना चाहिए?

संपादित

मसा में, मैं ADO.Net का उपयोग कर बेहतर होगा पता है, तो मेरे सवाल का अलग तरीके से व्यक्त करेंगे। मैं अभी भी जानना चाहूंगा कि यह सबसे अच्छा है कि डैपर क्या कर सकता है या क्या मैं इसे डैपर में करने का बेहतर तरीका खो रहा हूं?

+1

[एक थोक डालने] (https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx) एक 'IDataReader' ... इसलिए मुख्य साथ काम करता है चुनौती एक योजना और डेटा रीडर बनाना है जो गुणों के लिए कॉलम नामों के साथ पहुंच प्रदान करता है ... –

+1

डीबी –

+0

में उपयोगकर्ता परिभाषित तालिका प्रकार में एक एसपी और पास सूची का उपयोग करें https://github.com/tmsmith/Dapper-Extensions/ मुद्दे/18: http://stackoverflow.com/questions/9946287/correct-method-of-deleting-over-2100-rows-by-id-with-dapper/9947259#9947259 (जिसमें एक बनाने का प्रमुख नकारात्मक पक्ष है मेमोरी-राक्षस 'डेटाटेबल' कहा जाता है ...) –

उत्तर

5

एहसान सजद की टिप्पणी पर बिल्डिंग, तरीकों में से एक एक संग्रहित प्रक्रिया लिखना है जिसमें user-defined TABLE type का एक वास्तविक पैरामीटर है।

आप थोक डालने संपर्कों है कि एक प्रथम नाम और अंतिम नाम से मिलकर करना चाहते कहो, यह कैसे आप इसके बारे में जाना होगा: 1) एक टेबल प्रकार बनाएँ:

CREATE TYPE [dbo].[MyTableType] AS TABLE(
    [FirstName] [varchar](50) NULL, 
    [LastName] [varchar](50) NULL 
) 
GO 

2) अब बनाने के एक संग्रहीत proc उपरोक्त तालिका प्रकार का उपयोग करता है: .NET तरफ

CREATE PROC [dbo].[YourProc] 
/*other params here*/ 
@Names AS MyTableType READONLY 
AS 
/* proc body here 
*/ 
GO 

3),, यह एक में स्मृति डेटा तालिका आमतौर पर बनाने शामिल है System.Data.SqlDbType.Structured के रूप में पैरामीटर पारित तो जोड़ने इसके लिए पंक्तियां और फिर इस डेटाटा का उपयोग कर @ ऑब्जेक्ट पैरामीटर के रूप में ब्ली ऑब्जेक्ट। नोट: डेटाटेबल को स्मृति गहन माना जाता है - सावधान रहें और यह सुनिश्चित करने के लिए अपने कोड को प्रोफाइल करें कि इससे आपके सर्वर पर संसाधन समस्याएं उत्पन्न नहीं होती हैं।

altenative समाधान उपयोग दृष्टिकोण यहां उनका उल्लेख: https://stackoverflow.com/a/9947259/190476 समाधान हटाएँ है, लेकिन एक डालने के लिए अनुकूलित किया जा सकता है या भी अपडेट हो।

10

यदि प्रदर्शन तब होता है जब आप उसके बाद होते हैं तो मैं डैपर का उपयोग करके डालने के बजाय SqlBulkCopy का उपयोग करने की अनुशंसा करता हूं। कुछ प्रदर्शन तुलनाओं के लिए यहां देखें: http://www.ikriv.com/dev/db/SqlInsert/SqlInsert.html

4

उत्कृष्ट प्रदर्शन के साथ सम्मिलित करने का सबसे अच्छा तरीका SqlBulkCopy कक्षा का उपयोग सीधे एलेक्स और एंड्रियास के रूप में किया गया है।

अस्वीकरण: मैं परियोजना Dapper Plus

इस परियोजना निम्नलिखित कार्यों के लिए आसान सहायता प्रदान करता है के मालिक हूँ:

  • BulkInsert
  • BulkUpdate
  • BulkDelete
  • BulkMerge

मैपिंग का उपयोग करके और पहचान कॉलम जैसे आउटपुट मूल्य की अनुमति दें।

// CONFIGURE & MAP entity 
DapperPlusManager.Entity<Order>() 
       .Table("Orders") 
       .Identity(x => x.ID); 

// CHAIN & SAVE entity 
connection.BulkInsert(orders) 
      .AlsoInsert(order => order.Items); 
      .Include(x => x.ThenMerge(order => order.Invoice) 
         .AlsoMerge(invoice => invoice.Items)) 
      .AlsoMerge(x => x.ShippingAddress); 
+4

यह उत्तर ऐप्रॉप है iate और मूल्य जोड़ता है। इसे कम नहीं किया जाना चाहिए। – Seth

+1

@ जोनाथन मैगनन, स्पष्ट नहीं है कि डैपर प्लस के पास मुफ्त संस्करण है, और यह प्रो संस्करण से अलग कैसे है? –

+0

हैलो @ एरसन मर्कर्चन, कोई "मुफ़्त" संस्करण नहीं है। हालांकि, आप इसे असीमित समय तक मुफ्त में आज़मा सकते हैं जब तक कि आप उत्पादन तैयार न हों। हम इसे स्पष्ट करने के लिए जल्द ही हमारे सभी उत्पादों की समीक्षा करेंगे। –

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