2013-02-28 8 views
9

यह नहीं पता कि यह इरादा है या बग है, लेकिन पहले सेवएन्टिटी का उपयोग करके नीचे दिया गया कोड केवल नए बनाए गए रिकॉर्ड्स (EntityState = जोड़ा गया) के लिए इकाई को संशोधित करेगा, और काम नहीं करेगा संशोधित के लिए, क्या यह सही है?ब्रीज़ पहले सेवएन्टिएंटी केवल केवल जोड़ा गया इकाइयों को अपडेट करने की अनुमति देता है

protected override bool BeforeSaveEntity(EntityInfo entityInfo) 
    { 
     var entity = entityInfo.Entity; 
     if (entity is User) 
     { 
      var user = entity as User; 
      user.ModifiedDate = DateTime.Now; 
      user.ModifiedBy = 1; 
     } 
... 

उत्तर

9

इस समस्या की जड़ यह है कि हवा सर्वर पर हमारे पास सर्वर पर किए गए परिवर्तनों के लिए परिवर्तन ट्रैकिंग तंत्र में कोई भी निर्मित नहीं है। सर्वर इकाइयां शुद्ध पोको हो सकती हैं। किसी भी ग्राहक पक्ष में बदलाव के लिए हवा क्लाइंट में समृद्ध परिवर्तन ट्रैकिंग क्षमता होती है लेकिन जब आप सर्वर पर जाते हैं तो आपको इसे स्वयं प्रबंधित करने की आवश्यकता होती है।

समस्या सर्वर पर निष्पादन के अनुकूल होने के कारण होती है ताकि हम केवल उन गुणों को अपडेट कर सकें जो बदले गए हैं। यानी कि किसी भी SQL अद्यतन कथन केवल बदले गए कॉलम में किए जाते हैं। जाहिर है यह adds या Deletes या उन मामलों के लिए कोई समस्या नहीं है जहां हम क्लाइंट पर पहले से अपडेट किए गए कॉलम को अपडेट करते हैं। लेकिन अगर आप उस सर्वर पर एक फ़ील्ड अपडेट करते हैं जिसे क्लाइंट पर अपडेट नहीं किया गया था तो हवा को इसके बारे में कुछ भी पता नहीं है।

सिद्धांत रूप में हम सर्वर में आने वाली प्रत्येक इकाई को स्नैपशॉट कर सकते हैं और फिर यह निर्धारित करने के लिए इकाई पर हर क्षेत्र में पुनरावृत्ति कर सकते हैं कि क्या हस्तक्षेप को बचाने के दौरान कोई परिवर्तन किया गया था, लेकिन हम वास्तव में perf implications से नफरत करते हैं, खासकर जब से यह मामला शायद ही कभी होता है।

तो सर्वर पक्ष को अद्यतन करने के लिए यहां किसी अन्य उत्तर में दिए गए सुझाव OriginalValuesMap सही है और आपको वही करना होगा जो आपको चाहिए।

इसके अलावा, संस्करण 1.1.3 के रूप में, अतिरिक्त EntityInfo.ForceUpdate ध्वज जिसे आप सेट कर सकते हैं निर्दिष्ट इकाई में प्रत्येक कॉलम को अपडेट करने के लिए हवा को बताएगा। यह ऊपर दिए गए सुझाव के रूप में निष्पादक के रूप में काफी नहीं है, लेकिन यह आसान है, और प्रभाव किसी भी मामले में समान होगा।

उम्मीद है कि इससे मदद मिलती है।

7

मैं एक ही समस्या थी, और मैं हल ऐसा करने कि:

protected override bool BeforeSaveEntity(EntityInfo entityInfo) 
{ 
    if(entityInfo.EntityState== EntityState.Modified) 
    { 
    var entity = entityInfo.Entity; 
    entityInfo.OriginalValuesMap.Add("ModificationDate", entity.ModificationDate); 
    entity.ModificationDate = DateTime.Now; 
    } 
} 

मुझे लगता है कि आप अपने मामले को आसानी से लागू कर सकते हैं।

+0

यिक्स। हम इसमें देख रहे हैं और अधिक सहज ज्ञान कर रहे हैं। समाचार के लिए स्टैंडबाय। – Ward

+1

धन्यवाद कि काम किया, इकाई को गतिशील के रूप में घोषित करने के लिए जवाब बदल दिया। –

+0

हां, कामकाज के लिए धन्यवाद। लेकिन ओएमजी जो भयानक है। मैं एक बहुत दूर दूर रिलीज में एक बेहतर जवाब में देख रहा हूँ। इसे खोजने के लिए धन्यवाद ... और इसे जीवित रखना। – Ward

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

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