2011-07-21 15 views
11

में पूर्णांक के रूप में स्टोर एनम को पूर्ण नाम के बजाय मैं एन्म्स को RavenDB-दस्तावेज़ के अंदर पूर्णांक-मान के रूप में स्टोर करना चाहता हूं। ऐसा करने से, मैं यह सुनिश्चित करना चाहता हूं कि एक enum-value के नाम को बदलना, दृढ़ता को तोड़ नहीं देता है।RavenDB

FluentNHibernate के साथ, मैं एक कस्टम सम्मेलन बना सकता हूं, लेकिन मुझे RavenDB से मेल खाने वाला कुछ भी नहीं मिला।

उत्तर

9

आप कर सकते हैं अब बस करें:

store.Conventions.SaveEnumsAsIntegers = true; 
8

आप ऐसा करने के लिए जेसन कनवर्टर बनाकर ऐसा कर सकते हैं, फिर इसे documentStore.Conventions.Converters पर जोड़ें।

वास्तव में, हम नाम स्पष्ट रूप से, संगृहीत करेगा इसलिए आपको बस से documentStore.Conventions.Converters

+1

धन्यवाद। मैं ऐसा करने में कामयाब रहा। चूंकि यह NHibernate के साथ समान था, मुझे आश्चर्य है कि पूर्णांक के बजाय स्ट्रिंग-मान को संग्रहीत करने का कोई अच्छा कारण है या नहीं। आपने इसे इस तरह क्यों डिजाइन किया? –

+3

@dlang इस टिप्पणी को लिखने के समय मैं इसे इस तरह से करने में सक्षम था: 'सत्र। उन्नत। Conventions.CustomizeJsonSerializer = serializer => { serializer.Converters.Remove (serializer.Converters.Single (x => x Raven.Abstractions.Json.JsonEnumConverter); }; ' –

+1

@Ayende मैं सोच रहा हूं कि एनम नामों को संग्रहीत करना डिफ़ॉल्ट क्यों है ... –

3

EnumJsonConverter निकाल सकते हैं आज के रूप में आप यह कर सकते हैं:

store.Conventions.CustomizeJsonSerializer = jsonSerializer => 
{ 
    jsonSerializer.Converters.Remove(jsonSerializer.Converters.Where(c => 
    c.GetType() == typeof(JsonEnumConverter)).First()); 
}; 

store.Conventions.QueryEnumsAsIntegers = true; 

स्रोत: http://groups.google.com/group/ravendb/browse_thread/thread/18fef7b38252b27d

+4

आज के रूप में यह भी छोटा 'स्टोर है। Conventions.SaveEnumsAsIntegers = true; '। – mrydengren