2012-01-31 5 views
14

ईएफ 4.1+ में, कोड की इन 2 पंक्तियों के बीच कोई अंतर है?IDbSet.Add और DbEntityEntry.State = EntityState के बीच क्या अंतर है। जोड़ा गया?

dbContext.SomeEntitySet.Add(entityInstance); 
dbContext.Entry(entityInstance).State = EntityState.Added; 

या वे वही काम करते हैं? मैं सोच रहा हूं कि कोई व्यक्ति दूसरे के मुकाबले बाल संग्रह/नेविगेशन गुणों को अलग-अलग प्रभावित कर सकता है।

उत्तर

19

आप इस और अपने सभी संबंधित संस्थाओं के लिए dbContext.SomeEntitySet.Add(entityInstance); स्थिति का उपयोग करते हैं/संग्रह, जोड़ा करने के लिए सेट है, जबकि dbContext.Entry(entityInstance).State = EntityState.Added; भी संदर्भ के लिए सभी संबंधित संस्थाओं/संग्रह कहते हैं, लेकिन उन्हें के रूप में असंशोधित छोड़ देता है। तो यदि आप जिस इकाई को बनाने की कोशिश कर रहे हैं, उसके पास एक संबंधित इकाई है (और इसका मान शून्य नहीं है), जब आप इसे जोड़ते हैं तो यह उस बच्चे की इकाई के लिए एक नई वस्तु बनाएगा, जबकि दूसरी तरफ यह नहीं होगा।

+0

और क्या यह EntityState पर भी लागू होता है। हटाया गया और EntityState.Changed? –

+0

मेरा मानना ​​है कि आप dbContext.Entry (entityInstance) देखें। उस मामले में, मुझे लगता है कि हां, क्योंकि इकाई विधि केवल इसे अपने राज्य को बदलने के साथ ग्राफ में जोड़ती है (अनमोडिफाइड) और फिर आप मैन्युअल रूप से केवल उस स्थिति को बदल देते हैं इकाई, इसके संबंधित नहीं। – fbiagi

+0

क्या आपने अन्य प्रश्न पर @ माइकब्रिंड से टिप्पणी देखी है? – Colin

1

मैंने संबंधित इकाइयों/नेविगेशन गुणों के साथ ईएफ 6 के साथ इसका परीक्षण किया, और दोनों मामलों में बनाई गई वस्तुएं समान थीं। (सभी माता-पिता और संबंधित बाल वस्तुओं को बनाया गया था।) केवल एक ही अंतर मैंने देखा था कि एड के बारे में एक कारक के बारे में तेजी से जोड़ा गया था। मेरे डेटा में 1000 मूल वस्तुएं थीं, प्रत्येक में 5 बच्चे वस्तुओं के साथ डीबी को लिखे गए कुल 6000 ऑब्जेक्ट्स के लिए ।

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