2009-03-16 9 views
7

के साथ अद्यतन विवरण सरल प्रश्न, क्या यह एक इकाई को अद्यतन करते समय इकाई फ्रेमवर्क के साथ इस क्वेरी को हासिल करना संभव है?इकाई फ्रेमवर्क

update test set value = value + 1 where id = 10 

उत्तर

5

वास्तव में इस फ़ॉर्म के तहत नहीं।

आपको उन सभी इकाइयों का चयन करना होगा जो आपके मानदंड से मेल खाते हैं, उन पर foreach और उन्हें अद्यतन करें।

यदि आप ऐसा कुछ ढूंढ रहे हैं जो डीबी में सही करेगी क्योंकि आपका सेट बड़ा हो सकता है, तो आपको सीधे एसक्यूएल का उपयोग करना होगा। (मुझे याद नहीं है कि अगर ईएफ के पास लिंक से एसक्यूएल के तरीके से अद्यतन प्रश्नों को निष्पादित करने का कोई तरीका है)।

+0

बस मुझे संदेह था कि मैं एक स्पोक – Drevak

+8

का उपयोग करूंगा या आप इसका उपयोग करने में सक्षम हो सकते हैं: http://weblogs.asp.net/pwelter34/archive/2011/11/29/entity-framework-batch-update- और भविष्य के प्रश्न .aspx – MutantNinjaCodeMonkey

+0

@MutantNinjaCodeMonkey अच्छा पैकेज, साझा करने के लिए धन्यवाद! –

3

यह होना चाहिए, यह आमतौर पर थोड़ी अधिक बाध्य होगी।

var myEntity = context.First(item => item.id == 10); 
myEntity.value += 1; 
context.SaveChanges(); 

समान एसक्यूएल उत्पादन है, तो आप को देखने के लिए क्या एसक्यूएल वास्तव में बनाई जा रही है प्रोफाइलर देख सकते हैं, लेकिन यह बहुत अपने बयान के समान होना चाहिए।

+2

एफई-उत्पन्न एसक्यूएल काफी अलग है: दो एसक्यूएल बयान है, जो परमाणु नहीं हैं। –

+0

+1 बी/सी यह ईएफ कोर का उपयोग करता है। –

11

उपयोग Entity Framework Extended Library के बैच अद्यतन सुविधा है, इस तरह:

dbContext.Tests.Update(t => t.Id == 10, t => new Test() { Value = t.Value + 1 }); 
+0

MutantNinjaCodeMonkey ने इस लाइब्रेरी का एक अलग उत्तर पर टिप्पणी में उल्लेख किया। मैंने पाया कि लाइब्रेरी बिल को इतनी अच्छी तरह से फिट करती है कि वह अपने अलग जवाब में ध्यान देने योग्य था। –