2012-05-24 6 views
5

मैं एक मॉडल के भीतर पुराने मूल्यों पर कब्जा करने की तो मैं जमा करने के बाद नए मूल्यों के साथ तुलना कर सकते हैं, और परिवर्तन एक उपयोगकर्ता बनाता है की ऑडिट लॉग बनाने के लिए इच्छुक हूँ।एमवीसी 3 में मॉडल के लिए पुराने मूल्यों को कैप्चर करना?

मेरा अनुमान है डुप्लिकेट किए गए पुराने मूल्य गुणों के साथ छिपे हुए इनपुट बक्से के साथ यह क्या कर रहा है एक तरह से किया जाएगा। लेकिन सोच रहा है कि क्या कोई अन्य अच्छा विकल्प है?

धन्यवाद

+2

परिवर्तन लागू करने से पहले सबमिट किए गए ऑब्जेक्ट के साथ डीबी में ऑब्जेक्ट की तुलना क्यों न करें? – yoozer8

+0

मुझे रिकॉर्ड अपडेट करने वाले व्यक्ति की उपयोगकर्ता आईडी को कैप्चर करने की आवश्यकता है, साथ ही कोड केवल अपडेट होने के बजाय पूरे रिकॉर्ड को अपडेट करता है (लगता है कि मैंने डेटा को गलत तरीके से बाध्य किया है)। – stats101

उत्तर

9

बचाने विधि में, बस जाओ और परिवर्तनों को सहेजे से पहले डेटाबेस से मूल वस्तु मिलता है, तो आप अपने पुराने और नए मूल्यों के खिलाफ तुलना करने के लिए है? :)

+0

हम्म .. एक अच्छा विचार की तरह लगता है! डेटाबेस के लिए अतिरिक्त प्रश्नों के प्रदर्शन हिट के बारे में चिंतित। अगर अपडेट किसी भी कारण से विफल रहता है, तो इसके लिए ऑडिट प्रविष्टि होगी। – stats101

+0

अतिरिक्त प्रश्नों का प्रदर्शन? आप कितनी प्रविष्टियां पूछना चाहते हैं? आप एक ही संग्रह में सभी आईडी डालकर डेटाबेस से पूछ सकते हैं, फिर डेटाबेस से चयन कर सकते हैं जहां आईडी मूल्यों की सूची में है, 100 अलग-अलग वस्तुओं के लिए केवल 1 क्वेरी :) – mattytommo

+4

@ stats101: कुछ अनुकूलित न करें आपके पास कोई विचार नहीं है कि आपके लिए बाधा उत्पन्न होगी। यह सिर्फ समय बर्बाद कर रहा है। –

1

mattytommo वास्तव में क्या कहते हैं पसंदीदा तरीका चारों ओर है

का दृष्टांत

public ActionResult Edit(int id) { 
    var entity = new Entity(id); // have a constructor in your entity that will populate itself and return the instance of what is in the db 
    // map entity to ViewModel using whatever means you use 
    var model = new YourViewModel(); 
    return View(model); 
} 

पोस्ट वापस बदल जाता

[HttpPost] 
public ActionResult Edit(YourViewModel model) { 
    if (ModelState.IsValid) { 
     var entity = new YourEntity(model.ID); // re-get from db 
     // make your comparison here 
     if(model.LastUserID != entity.LastUserID // do whatever 
     ... etc... 
    } 
    return View(model); 
} 
1

तुम भी दुकान सकता है एक नई कंपनी बनाने के लिए नए दृश्य मॉडल दृश्य बैग में मूल मॉडल और कुछ इस तरह करते हैं ...

// In the controller 
public ActionResult DoStuff() 
{ 
    // get your model 
    ViewBag.OriginalModel = YourModel; 
    return View(YourModel); 
} 

// In the View 
<input type="hidden" name="originalModel" value="@Html.Raw(Json.Encode(ViewBag.OriginalModel));" /> 

// In the controller's post... 
[HttpPost] 
public ActionResult DoStuff(YourModel yourModel, string originalModel) 
{ 
    // yourModel will be the posted data. 
    JavaScriptSerializer JSS = new JavaScriptSerializer(); 
    YourModel origModel = JSS.Deserialize<YourModel>(originalModel); 
} 

मुझे इसका परीक्षण करने का मौका नहीं मिला, सिर्फ एक सिद्धांत :)

2

यह मानक लेखा परीक्षा की तरह लगता है। आपको चिंता नहीं करनी चाहिए कि क्या बदल गया है बस सब कुछ कैप्चर करें और किसने बदलाव किया है। जब तक कि कुछ प्रकार की वास्तविक समय रिपोर्टिंग नहीं की जाती है।

संभव लेखा परीक्षा कार्यान्वयन:

CQRS, संक्षेप में यह एक दिया वस्तु के लिए हर परिवर्तन ट्रैक करता है। नकारात्मकता यह एक वास्तुकला है जो लागू करने में अधिक शामिल है।

रोलिंग खाता बही। प्रत्येक डालने डेटाबेस में एक नई पंक्ति है। सबसे वर्तमान पंक्ति प्रदर्शन उद्देश्यों के लिए उपयोग की जाती है, लेकिन प्रत्येक अद्यतन के साथ, डेटाबेस में एक नई पंक्ति डाली जाती है।

फिर भी एक और दृष्टिकोण इसे बंद को बचाने के लिए एक लेखा परीक्षा तालिका में है।

सभी काम करवाने के।

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