मैं ईएफ 4.1 के लिए नया हूं, मैं ईएफ और डीबी पहले दृष्टिकोण का उपयोग कर एसक्यूएल टेबल में ऑब्जेक्ट की सूची जोड़ने की कोशिश कर रहा हूं।

1) क्या मुझे AddObject(Trans) के बाद संदर्भ.SaveChanges() लूप के अंदर कॉल करना चाहिए या इसे लूप के बाहर कॉल करना ठीक है?

2) साथ ही, क्या कोई त्रुटि होने पर सभी लेन-देन वापस ले लिए जाएंगे? मैंने पढ़ा है कि इकाई फ्रेमवर्क पहले से ही मूल डेटाबेस लेनदेन का समर्थन करता है, यदि कोई गंदा ऑब्जेक्टस्टेट एंटर्री ऑब्जेक्ट जारी नहीं रखा जा सकता है, तो ऑब्जेक्ट कॉन्टेक्स्ट। सेव चेंज लेनदेन को वापस रोल करेगा और अपवाद फेंक देगा।

3) प्रदर्शन बढ़ाने के लिए और क्या किया जा सकता है? मैं एक बार में लगभग 1200 रिकॉर्ड डालूंगा।

try
{
    using (TransactionModel context = new TransactionModel())
    {
        try
        {
            foreach (var item in lstUnAllocatedTransaction)
            {
                Transaction Trans = new Transaction();

                Trans.Amount = item.Amount;
                Trans.Date = Datetime.Now;
                Trans.DateAllocated = null;

                context.Transactions.AddObject(Trans);
            }
            context.SaveChanges();
        }
        catch (Exception ex)
        {
        }
    }
}
catch (Exception ex)
{
}
}
1
user1263981 8 अक्टूबर 2018, 17:51

1 उत्तर

सबसे बढ़िया उत्तर

1) क्या मुझे AddObject(Trans) के बाद संदर्भ.SaveChanges() लूप के अंदर कॉल करना चाहिए या इसे लूप के बाहर कॉल करना ठीक है?

लूप के बाहर कॉल करना ठीक है (और बेहतर) यदि यह ठीक है कि संपूर्ण ऐड ऑपरेशंस एक लेनदेन है। यदि आपको प्रति आइटम एक लेनदेन की आवश्यकता है, तो जाहिर है कि आपको इसे लूप के अंदर कॉल करने की आवश्यकता है।

2) साथ ही, क्या कोई त्रुटि होने पर सभी लेन-देन वापस ले लिए जाएंगे? मैंने पढ़ा है कि इकाई फ्रेमवर्क पहले से ही मूल डेटाबेस लेनदेन का समर्थन करता है, यदि कोई गंदा ऑब्जेक्टस्टेट एंटर्री ऑब्जेक्ट जारी नहीं रखा जा सकता है, तो ऑब्जेक्ट कॉन्टेक्स्ट। सेव चेंज लेनदेन को वापस रोल करेगा और अपवाद फेंक देगा।

केवल अंतिम लेन-देन वापस लिया जाएगा। इसलिए 1) फर्क पड़ता है। यदि आप सभी या कोई नहीं डालना चाहते हैं तो आपको सभी को जोड़ना होगा और फिर SaveChanges को एक बार कॉल करना होगा।

3) प्रदर्शन बढ़ाने के लिए और क्या किया जा सकता है? मैं एक बार में लगभग 1200 रिकॉर्ड डालूंगा।

आप Add के बजाय AddRange पर कॉल कर सकते हैं, अन्यथा मुझे कभी भी कम संख्या में रिकॉर्ड की समस्या नहीं हुई। अगर आपको लगता है कि यह बहुत धीमा है, तो बल्क इंसर्ट देखें। ऐसा करने के लिए ईएफ में कुछ भी नहीं बनाया गया है, आपको एक विस्तार की आवश्यकता होगी।

1
nvoigt 8 अक्टूबर 2018, 15:05