2012-10-02 19 views
13

मैं RavenDB का उपयोग करने वाले एप्लिकेशन फ्रेमवर्क को प्राप्त करने की कोशिश कर रहा हूं। मैंने एक व्यापार तर्क सेवा स्थापित की है, जिसमें सत्र के साथ 1 से 1 संबंध है और प्रभावी ढंग से कार्य अमूर्तता की इकाई बन जाती है।रैवेनडीबी ने ट्रैक किए गए परिवर्तनों को ट्रैक किया है

व्यापार तर्क सेवा का हिस्सा सभी सत्यापन होना होगा। सेवा से एक विधि की तरह

public void StoreUser(User user) 
    { 
     //Some validation logic 
     if(string.IsNullOrWhiteSpace(user.Name)) 
      throw new Exception("User name can not be empty"); 

     Session.Store(user); 
    } 

मुद्दा है कुछ हो सकता है कि क्योंकि उपयोगकर्ता जैसे ही यह संग्रहीत किया जाता है मैं दुकान विधि पर किसी भी मान्यता बायपास कर सकते हैं, लेकिन एक सही मान भंडारण करके उसे बाद में बदल रहा है

ट्रैक किया जाता है
public void TestUserStore() 
    { 
     var u1 = new User() {Name = "John"}; 
     var u2 = new User() { Name = "Amy" }; 

     Service.StoreUser(u1); 
     u1.Name = null; //change is tracked and will persist on the next save changes 
     Service.StoreUser(u2); 
     Service.SaveChanges(); 

     //The following fails, as we have stored null as the name rather than "John" bypassing our validation 
     Assert.IsTrue(Service.AdhocQuery<User>().Any(u => u.Name == "John")); 

    } 

क्या रेवेनडीबी को संग्रहीत किए गए आइटम का स्नैपशॉट स्टोर करने और आगे के परिवर्तनों को ट्रैक करने के लिए कुछ ऐसा नहीं है? क्या मुझे अवैध अद्यतन को रोकने के लिए व्यवसाय तर्क सेवा में और बाहर जाने वाली हर चीज को क्लोन करना चाहिए? या क्या मैं गलत जगह पर सत्यापन कर रहा हूं क्या इस तर्क को रखने के लिए एक बेहतर जगह है?

उत्तर

12

प्रत्येक सत्यापन से पहले अपने सत्यापन तर्क को IDocumentStoreListener के अंदर रखें, आप इस प्रकार की जांच स्वचालित रूप से कर सकते हैं।

मैंने इस मुद्दे here के बारे में अधिक ब्लॉग किया।

+4

ग्रेट एक्सटेंशन पॉइंट, वर्तमान में प्रलेखन – Alex

+0

पर आपकी प्रतिक्रिया के लिए यह अधिक प्रचार का हकदार है। –

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