2012-10-06 10 views
9

सर्विसस्टैक ऑर्मेलाइट डिफ़ॉल्ट और गणना कॉलम को कैसे प्रबंधित करता है?सर्विसस्टैक ऑर्मेलाइट - डिफ़ॉल्ट और संगणित कॉलम हैंडलिंग

विशेष रूप से मैं त्रुटि

The column "PointsAvailable" cannot be modified because it is either a computed column or is the result of a UNION operator. 

यह कॉलम एक एसक्यूएल सर्वर 2008 डेटाबेस में एक गणना स्तंभ के रूप में कॉन्फ़िगर किया गया है हो रही है।

OrmLite गणना वाले कॉलम के साथ कुछ ऐसा प्रतीत होता है क्योंकि आप एक मॉडल में एक संपत्ति में '[ServiceStack.DataAnnotations.Compute]' विशेषता जोड़ सकते हैं।

कोड में कदम उठाने, 'OrmLiteDialetBase.cs' में 'ToInsertRowStatement' फ़ंक्शन को कॉल किया जाता है। हालांकि यह फ़ंक्शन जांच रहा है कि ऑटोइंक्चर प्रॉपर्टी सेट है या नहीं, यह जांच नहीं कर रहा है कि IsComputed प्रॉपर्टी सेट है या नहीं।

मुझे नहीं पता कि यह एक बग है या मैं इसे गलत तरीके से उपयोग कर रहा हूं।

+0

मैं IsComputed के लिए एक चेक जोड़ने का प्रयास करता हूं। यदि यह समस्या को हल करता है, तो बिगफिक्स के साथ github पर एक पुल अनुरोध बनाएं। सर्विसस्टैक एक अच्छी तरह से आर्किटेक्टेड प्रोग्राम है, इसलिए यह संभावना नहीं है कि ऐसी कई जगहें हों जहां यह जांच हो सकती है। – theMayer

+0

मेरी पिछली टिप्पणी को स्पष्ट करने के लिए, आप इसे स्रोत कोड में करेंगे, फिर बाइनरी को पुन: संकलित करें। लगभग 5 मिनट से ज्यादा नहीं लेना चाहिए। – theMayer

उत्तर

0

मैं सर्जरी करता हूं कि आप तालिका से प्रासंगिक कॉलम (गणना किए गए कॉलम को छोड़कर) के साथ एक दृश्य बनाएं और इसके बजाय दृश्य से कार्य करें। इस तरह आप अवांछित गणना कॉलम के संदर्भ से बचें। सरल विचारों को सम्मिलित करने, हटाने, अपडेट करने और अन्य पहलुओं के संबंध में सामान्य तालिकाओं के समान व्यवहार किया जा सकता है।

+0

यह थोडा है ... हैकी। मैं उम्मीद कर रहा था कि सर्विसस्टैक में ऐसा करने के लिए कुछ अंतर्निहित तरीका था। – John

+0

@john ऐसा लगता है कि आप वर्तमान में ServiceStack OrmLite में किसी प्रकार की बग का अनुभव कर रहे हैं। चूंकि मैं आपके उपकरण को ठीक नहीं कर सकता, इसलिए एक कामकाज दूसरी सबसे अच्छी बात होनी चाहिए, यह एक कामकाज के लिए मेरा शल्यचिकित्सा है। अन्यथा आप उन लोगों से संपर्क कर सकते हैं जिन्होंने ऑर्मेलाइट बनाया और एक फिक्स का अनुरोध किया। –

6

मेरी अभिकलन कॉलम जो केवल सेवा परत में गणना के लिए, एसक्यूएल उनके बारे में कुछ नहीं जानता, तो मैं servicestack मॉडल पर निम्न विशेषताओं का एक संयोजन का इस्तेमाल किया:

[Compute, ServiceStack.DataAnnotations.Ignore] 
public List<MyModel> MyList {get;set;} 

अंतर प्रतीत हो रहा है "अनदेखा करें" विशेषता जिसने इसे नामस्थान संलग्न करने पर जोर दिया ?? इन जगहों पर, मेरे मूल प्रश्न चलते हैं, अन्यथा एसक्यूएल शिकायत करता है कि कॉलम मौजूद नहीं हैं - ठीक है पर्याप्त!

आप टी -clausen.dk द्वारा सुझाए गए अनुसार, SQL कॉलमटेक्स्ट स्ट्रिंग को विशेष रूप से SQL कॉलमटेक्स्ट स्ट्रिंग को अपने सभी कॉलम नामों के साथ पास करके कर सकते हैं, लेकिन मुझे लगता है कि रखरखाव समस्या खुलती है।

डेटाबेस पर एक बगफिक्स के लिए, ऐसा लगता है कि एसक्यूएल प्रति-प्रदाता आधार पर "toSqlString()" या इसी तरह की विधि द्वारा उत्पन्न होता है। तो शायद ध्यान देने के लिए कुछ स्पॉट हैं ...

संपादित करें: यह केवल अनजान विशेषता है जो नौकरी करता है। स्रोत से:

/// IgnoreAttribute 
/// Use to indicate that a property is not a field in the table 
/// properties with this attribute are ignored when building sql sentences 

एएलआईएएस का उपयोग करने का विकल्प भी है जिसे मैंने नहीं खोजा है।

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