2015-06-03 10 views
6

एक के बाद वर्तमान मूल्य में वृद्धि से क्या मैं हासिल करना चाहते हैं सरल एसक्यूएल क्वेरी है: अद्यतन मेज सेट स्तंभ = स्तंभ + 1इकाई की रूपरेखा अद्यतन एक स्तंभ के बिना चयन

वहाँ यह ऐसा करने के लिए एक रास्ता है सभी रिकॉर्ड्स (हजारों) को पहले स्मृति में लोड करने के बिना और कॉलम को बढ़ाने के लिए प्रत्येक रिकॉर्ड के माध्यम से लूप और फिर इसे वापस सहेज लें?

संपादित

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

एसक्यूएल के लिए, यह अद्यतन schemaname जैसा लगता है। टैबलेट सेट COLUMN = COLUMN + 1। POSTGRESQL के लिए , मुझे स्कीमा नाम, तालिका का नाम और कॉलम नाम उद्धृत करना होगा: अद्यतन "schemaname"। "तालिका" सेट "COLUMN" = "COLUMN" + 1

+1

SQL कमांड चलाने के साथ समस्या क्या है? (यह प्रश्न "एसक्यूएल" टैग किया गया है) –

+0

'myContext.Database।ExecuteSqlCommand ("अद्यतन तालिका सेट COLUMN = COLUMN + 1"); ' –

+0

मुझे लगता है कि यह वही करता है जो आप चाहते हैं: https://github.com/MikaelEliasson/EntityFramework.Utilities#update-by-query –

उत्तर

1

शुद्ध ईएफ के साथ, आप सही हैं: आपको इकाइयों को एक-एक करके लोड करना, संपत्ति सेट करना और सहेजना है। बहुत अक्षम

2 विकल्प है कि मैं के बारे में पता कर रहे हैं:

  1. अद्यतन बयान निष्पादित करने के लिए के रूप में आप यह चाहते कच्चे एसक्यूएल प्रदान करें।
  2. EntityFramework.Extended लाइब्रेरी (https://github.com/loresoft/EntityFramework.Extended) का उपयोग करें, जो एक प्राकृतिक ईएफ महसूस के साथ थोक अद्यतन और DELETEs दोनों का समर्थन करता है। अपने मुख्य पृष्ठ से

उद्धरण:

बैच अद्यतन और

इकाई की रूपरेखा का एक वर्तमान सीमाओं को हटाएँ है कि एक इकाई आप पहली बार पुनः प्राप्त करने के लिए है को अपडेट करने या हटाने के लिए आपको यह स्मृति में है। अब ज्यादातर परिदृश्यों में यह ठीक है। हालांकि कुछ वरिष्ठ हैं जहां प्रदर्शन भुगतना होगा। साथ ही, एकल हटाए जाने के लिए, ऑब्जेक्ट को हटाया जाने से पहले पुनर्प्राप्त किया जाना चाहिए डेटाबेस की दो कॉल की आवश्यकता होती है। बैच अपडेट और डिलीट इसे संशोधित करने से पहले एक इकाई को पुनर्प्राप्त करने और लोड करने की आवश्यकता को समाप्त करता है।

हटाया जा रहा है

//delete all users where FirstName matches 
context.Users.Where(u => u.FirstName == "firstname").Delete(); 

अद्यतन

//update all tasks with status of 1 to status of 2 
context.Tasks.Update(
    t => t.StatusId == 1, 
    t2 => new Task {StatusId = 2}); 

//example of using an IQueryable as the filter for the update 
var users = context.Users.Where(u => u.FirstName == "firstname"); 
context.Users.Update(users, u => new User {FirstName = "newfirstname"}); 
+0

EntityFramework.Extended मदद नहीं करेगा। यह एक महान पुस्तकालय है लेकिन बैच सुविधा केवल आपको * समान * मान पर एकाधिक रिकॉर्ड के कॉलम सेट करने देती है। –

2

यहाँ समाधान है। आप निम्नलिखित कोड का उपयोग कर सकते हैं:

context.Table.Where(x => x.Field1 > 0).Update(y => new Table { Field2 = y.Field2 + 1 }); 

उम्मीद है कि यह मदद करता है।

+0

यह केवल ईएफ कोर है – Proviste

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