मैं एक ASP.NET MVC3 वातावरण में इकाई फ्रेमवर्क 5 के भीतर एक रिकॉर्ड को संपादित / अद्यतन करने के विभिन्न तरीकों की खोज कर रहा हूं, लेकिन अभी तक उनमें से कोई भी सभी बक्से को टिक नहीं करता है जिनकी मुझे आवश्यकता है। मैं समझाता हूँ क्यों।
मुझे तीन विधियाँ मिली हैं जिनमें मैं पेशेवरों और विपक्षों का उल्लेख करूँगा:
विधि 1 - मूल रिकॉर्ड लोड करें, प्रत्येक गुण को अपडेट करें
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
original.BusinessEntityId = updatedUser.BusinessEntityId;
original.Email = updatedUser.Email;
original.EmployeeId = updatedUser.EmployeeId;
original.Forename = updatedUser.Forename;
original.Surname = updatedUser.Surname;
original.Telephone = updatedUser.Telephone;
original.Title = updatedUser.Title;
original.Fax = updatedUser.Fax;
original.ASPNetUserId = updatedUser.ASPNetUserId;
db.SaveChanges();
}
पेशेवरों
- निर्दिष्ट कर सकते हैं कि कौन से गुण बदलते हैं
- दृश्य में प्रत्येक संपत्ति शामिल करने की आवश्यकता नहीं है
विपक्ष
- मूल लोड करने के लिए डेटाबेस पर 2 एक्स क्वेरी फिर इसे अपडेट करें
विधि 2 - मूल रिकॉर्ड लोड करें, परिवर्तित मान सेट करें
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
db.Entry(original).CurrentValues.SetValues(updatedUser);
db.SaveChanges();
}
पेशेवरों
- केवल संशोधित गुणों को डेटाबेस में भेजा जाता है
विपक्ष
- दृश्य में प्रत्येक गुण सम्मिलित होना आवश्यक है
- मूल लोड करने के लिए डेटाबेस पर 2 एक्स क्वेरी फिर इसे अपडेट करें
विधि 3 - अद्यतन रिकॉर्ड संलग्न करें और स्टेट को EntityState.Modified पर सेट करें
db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();
पेशेवरों
- अद्यतन करने के लिए डेटाबेस पर 1 एक्स क्वेरी
विपक्ष
- निर्दिष्ट नहीं कर सकते कि कौन से गुण बदलते हैं
- दृश्य में प्रत्येक गुण होना चाहिए
सवाल
आप लोगों से मेरा सवाल; क्या कोई ऐसा साफ तरीका है कि मैं इस लक्ष्य को हासिल कर सकूं?
- निर्दिष्ट कर सकते हैं कि कौन से गुण बदलते हैं
- दृश्य में प्रत्येक प्रॉपर्टी (जैसे पासवर्ड!) होने की आवश्यकता नहीं है
- अद्यतन करने के लिए डेटाबेस पर 1 एक्स क्वेरी
मैं समझता हूं कि यह इंगित करने के लिए काफी मामूली बात है लेकिन मुझे इसका एक सरल समाधान याद आ रहा है। यदि कोई विधि नहीं है, तो प्रबल हो जाएगा ;-)