मैं एक एमवीसी 3 वेब ऐप पर काम कर रहा हूं। जब उपयोगकर्ता कुछ अपडेट करता है, तो मैं पुराने डेटा की तुलना उस नए उपयोगकर्ता से करना चाहता हूं जो उपयोगकर्ता इनपुट कर रहा है और प्रत्येक फ़ील्ड के लिए अलग-अलग गतिविधि लॉग बनाने के लिए लॉग में जोड़ें।उसी प्रकार की दो इकाइयों के बीच अंतर खोजें
[HttpPost]
public RedirectToRouteResult SaveSingleEdit(CompLang newcomplang)
{
var oldCompLang = _db.CompLangs.First(x => x.Id == newcomplang.Id);
_db.CompLangs.Attach(oldCompLang);
newcomplang.LastUpdate = DateTime.Today;
_db.CompLangs.ApplyCurrentValues(newcomplang);
_db.SaveChanges();
var comp = _db.CompLangs.First(x => x.Id == newcomplang.Id);
return RedirectToAction("ViewSingleEdit", comp);
}
मैंने पाया कि मैं इस का उपयोग कर सकते oldCompLang की मेरी संपत्ति के माध्यम से पुनरावृति करने के लिए:
var oldpropertyInfos = oldCompLang.GetType().GetProperties();
लेकिन यह वास्तव में नहीं है
अभी इस क्या मेरी कार्रवाई को बचाने की तरह लग रहा है मदद करें क्योंकि यह केवल मुझे गुण (आईडी, नाम, स्थिति ...) दिखाता है और इन गुणों के मान नहीं (1, हैलो, तैयार ...)।
मैं सिर्फ मुश्किल तरीके से जा सकते हैं:
if (oldCompLang.Status != newcomplang.Status)
{
// Add to my activity log table something for this scenario
}
लेकिन मैं वास्तव में वस्तु के सभी गुण के लिए कर रही हो नहीं करना चाहती।
मुझे यकीन नहीं है कि दोनों वस्तुओं के माध्यम से विसंगतियों को खोजने के लिए सबसे अच्छा तरीका क्या है (उदाहरण के लिए उपयोगकर्ता ने नाम बदल दिया है, या स्थिति ...) और उन मतभेदों से एक सूची बनाएं जिन्हें मैं दूसरे में स्टोर कर सकता हूं तालिका।
वाह, जो शानदार ढंग से काम करता है! धन्यवाद! – LanFeusT
बहुत उपयोगी छोटी स्निपेट - धन्यवाद! – rwalter
मेरे अलावा, अगर संपत्ति एक datetime आप proerties बदलने की आवश्यकता है: 'अगर (selfValue दिनांक समय && toValue है दिनांक समय है) { \t \t \t \t \t \t \t \t \t DATETIME से = (DATETIME) selfValue; डेटटाइम = (डेटटाइम) toValue; यदि (! DateTime.Equals (से, से)) { } ' – JoeJoe87577