दिलचस्प पोस्ट
अनुरोध इकाई बहुत बड़ा PHP गतिशील रूप से आवंटित सरणी के लिए आदर्श विकास दर क्या है? ईएफ 6 ट्यूटोरियल एसाईक्रोनस कॉल का उपयोग क्यों करता है? ini फ़ाइल बनाएँ, PHP में मान लिखें जावा में नल के साथ प्रकार कास्टिंग के दौरान कोई अपवाद नहीं Xxhdpi एंड्रॉइड के लिए स्केल कारक? Linux में सी में शैल स्क्रिप्ट को कैसे निष्पादित करें? जावास्क्रिप्ट में ऑब्जेक्ट गुण परिवर्तन के लिए देखें क्या कोणीय मार्गों के वैकल्पिक पैरामीटर मान हैं? कैसे jQuery का इस्तेमाल किया जा सकता है आस्थगित? JLabel छवियाँ सरणी SQL सर्वर स्ट्रिंग या बाइनरी डेटा को छोटा किया जाएगा HTML में एक PowerPoint प्रस्तुति एम्बेड करें लूप के लिए सी + + ओपनएमपी समानांतर – स्टडी :: वेक्टर के विकल्प Svn.exe कहां है मेरी मशीन में?

यदि वह मौजूद है तो पंक्ति को अपडेट करें या फिर इकाई फ़्रेमवर्क के साथ डालें तर्क

क्या किसी व्यक्ति को "अद्यतन पंक्ति यदि यह मौजूद है" को कार्यान्वित करने का सबसे कारगर तरीका है, तो एंटीआई फ्रेमवर्क का उपयोग कर तर्क?

वेब के समाधान से एकत्रित समाधान "यदि वह मौजूद है तो पंक्ति को अपडेट करें या फिर इकाई फ़्रेमवर्क के साथ डालें तर्क"

यदि आप संलग्न ऑब्जेक्ट के साथ काम कर रहे हैं (प्रसंग के एक ही उदाहरण से लोड ऑब्जेक्ट) आप बस का उपयोग कर सकते हैं:

if (context.ObjectStateManager.GetObjectStateEntry(myEntity).State == EntityState.Detached) { context.MyEntities.AddObject(myEntity); } // Attached object tracks modifications automatically context.SaveChanges(); 

यदि आप ऑब्जेक्ट की कुंजी के बारे में किसी भी ज्ञान का उपयोग कर सकते हैं तो आप इस तरह से कुछ का उपयोग कर सकते हैं:

 if (myEntity.Id != 0) { context.MyEntities.Attach(myEntity); context.ObjectStateManager.ChangeObjectState(myEntity, EntityState.Modified); } else { context.MyEntities.AddObject(myEntity); } context.SaveChanges(); 

यदि आप ऑब्जेक्ट के ऑब्जेक्ट को अपनी आईडी से तय नहीं कर सकते हैं, तो आपको लुकअप क्वेरी का विश्लेषण करना चाहिए:

 var id = myEntity.Id; if (context.MyEntities.Any(e => e.Id == id)) { context.MyEntities.Attach(myEntity); context.ObjectStateManager.ChangeObjectState(myEntity, EntityState.Modified); } else { context.MyEntities.AddObject(myEntity); } context.SaveChanges(); 

इकाई फ्रेमवर्क 4.3 के अनुसार, नामस्थान System.Data.Entity.Migrations पर एक AddOrUpdate विधि है। AddOrUpdate :

 public static void AddOrUpdate<TEntity>( this IDbSet<TEntity> set, params TEntity[] entities ) where TEntity : class 

जो डॉक्टर द्वारा:

सहेजेचरों को कहा जाता है जब कुंजी से संस्थाओं को जोड़ता है या अद्यतन करता है डेटाबेस शब्दावली से एक "अपरेट" ऑपरेशन के बराबर माइग्रेशन का उपयोग करते हुए डेटा सीडिंग करते समय यह विधि उपयोगी हो सकती है।


@ स्मैशिंग 1 9 78 की टिप्पणी का जवाब देने के लिए, मैं @ कॉलिन द्वारा प्रदान की गई लिंक से प्रासंगिक भागों पेस्ट करूँगा

AddOrUpdate का काम यह सुनिश्चित करने के लिए है कि जब आप विकास के दौरान बीज डेटा बनाते हैं तो आप डुप्लिकेट नहीं बनाते हैं।

सबसे पहले, यह आपके डेटाबेस में एक क्वेरी निष्पादित करेगा, जिसमें एक रिकॉर्ड की तलाश है, जहां आप एक कुंजी (प्रथम पैरामीटर) के रूप में प्रदान की गई हैं, मैप किए गए कॉलम मूल्य (या मान) से जुड़ा हुआ है जो AddOrUpdate में दिए गए हैं। तो यह डिजाइन के समय के आंकड़ों को सीधा करने के लिए मिलान करने के लिए थोड़ा सा ढीला-गोज़ी है लेकिन बिल्कुल ठीक है।

इससे भी महत्वपूर्ण बात यह है कि यदि कोई मैच मिला है तो अपडेट सभी को अपडेट कर देगा और जो आपके एडऑपरेट में नहीं था वह बाहर निकलेगा।

उसने कहा, मुझे एक ऐसी स्थिति है जहां मैं एक बाहरी सेवा से डेटा खींच रहा हूं और मौजूदा कुंजी को प्राथमिक कुंजी (और उपभोक्ताओं के लिए मेरा स्थानीय डेटा केवल पढ़ने के लिए) के द्वारा डालने या अपडेट करना है – अब 6 माह से अधिक समय के लिए उत्पादन में AddOrUpdate का उपयोग कर रहा AddOrUpdate अभी तक कोई समस्या नहीं है

यदि आप जानते हैं कि आप एक ही संदर्भ का उपयोग कर रहे हैं और किसी भी संस्था को अलग नहीं कर रहे हैं, तो आप इस तरह एक सामान्य संस्करण बना सकते हैं:

 public void InsertOrUpdate<T>(T entity, DbContext db) where T : class { if (db.Entry(entity).State == EntityState.Detached) db.Set<T>().Add(entity); // If an immediate save is needed, can be slow though // if iterating through many entities: db.SaveChanges(); } 

db निश्चित रूप से एक कक्षा का क्षेत्र हो सकता है, या विधि स्थैतिक और एक एक्सटेंशन बना सकती है, लेकिन यह मूल बातें है

लादीस्लाव का जवाब बहुत ही करीब था, लेकिन मुझे इसे ईएफ 6 (डेटाबेस-पहले) में काम करने के लिए कुछ संशोधनों को करना था। मैंने अपने डेटा संदर्भ को मेरे AddOrUpdate विधि के साथ बढ़ा दिया है और अभी तक यह अलग वस्तुओं के साथ अच्छी तरह से काम करता है:

 using System.Data.Entity; [....] public partial class MyDBEntities { public void AddOrUpdate(MyDBEntities ctx, DbSet set, Object obj, long ID) { if (ID != 0) { set.Attach(obj); ctx.Entry(obj).State = EntityState.Modified; } else { set.Add(obj); } } [....] 

यह जादू तब होता है जब SaveChanges() फोन करता है और वर्तमान EntityState पर निर्भर करता है। यदि इकाई में एक EntityState.Added है। जोड़ा गया है, यह डेटाबेस में जोड़ा जाएगा, अगर इसमें EntityState.Modified , तो इसे डेटाबेस में अपडेट किया जाएगा। तो आप निम्न के रूप में एक InsertOrUpdate() विधि लागू कर सकते हैं:

 public void InsertOrUpdate(Blog blog) { using (var context = new BloggingContext()) { context.Entry(blog).State = blog.BlogId == 0 ? EntityState.Added : EntityState.Modified; context.SaveChanges(); } } 

एंटिटीस्टेट के बारे में अधिक जानकारी

यदि आप यह निर्धारित करने के लिए Id = 0 पर नहीं जांच सकते हैं कि यह एक नई इकाई है या नहीं, तो लादिस्लाव मिर्का के उत्तर की जांच करें।

अन्य दोनों डालें और अपडेट करें

 public void InsertUpdateData() { //Here TestEntities is the class which is given from "Save entity connection setting in web.config" TestEntities context = new TestEntities(); var query = from data in context.Employee orderby data.name select data; foreach (Employee details in query) { if (details.id == 1) { //Assign the new values to name whose id is 1 details.name = "Sanjay"; details. Surname="Desai"; details.address=" Desiwadi"; } else if(query==null) { details.name="Sharad"; details.surname=" Chougale "; details.address=" Gargoti"; } //Save the changes back to database. context.SaveChanges(); } 

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

यह स्वचालित रूप से संस्थाओं की स्थिति को Added या Modified करने के लिए सेट कर देगा। और आप मैन्युअल रूप से यह चुन लेंगे कि कौन सा संस्थाएं हटाई जानी चाहिए यदि यह अब मौजूद नहीं है।

उदाहरण:

मान लीजिए मुझे एक Person वस्तु मिल गई है Person में कई फोन, एक दस्तावेज़ हो सकता है और एक पति या पत्नी हो सकता है

 public class Person { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string MiddleName { get; set; } public int Age { get; set; } public int DocumentId {get; set;} public virtual ICollection<Phone> Phones { get; set; } public virtual Document Document { get; set; } public virtual PersonSpouse PersonSpouse { get; set; } } 

मैं सभी संस्थाओं की स्थिति का निर्धारण करना चाहता हूं जो ग्राफ़ में शामिल है I

 context.InsertOrUpdateGraph(person) .After(entity => { // Delete missing phones. entity.HasCollection(p => p.Phones) .DeleteMissingEntities(); // Delete if spouse is not exist anymore. entity.HasNavigationalProperty(m => m.PersonSpouse) .DeleteIfNull(); }); 

इसके अलावा, जैसा कि आप जानते हैं कि फोन इकाई की स्थिति को परिभाषित करते समय अद्वितीय महत्वपूर्ण गुण भूमिका निभा सकते हैं। ऐसे विशेष प्रयोजनों के लिए हमारे पास ExtendedEntityTypeConfiguration<> EntityTypeConfiguration<> वर्ग है, जो EntityTypeConfiguration<> । यदि हम ऐसे विशेष कॉन्फ़िगरेशन का उपयोग करना चाहते हैं, तो हमें अपने मैपिंग कक्षाओं को EntityTypeConfiguration<> , EntityTypeConfiguration<> बजाय से प्राप्त करना होगा। उदाहरण के लिए:

 public class PhoneMap: ExtendedEntityTypeConfiguration<Phone> { public PhoneMap() { // Primary Key this.HasKey(m => m.Id); … // Unique keys this.HasUniqueKey(m => new { m.Prefix, m.Digits }); } } 

बस इतना ही।