आप उन्हें string
या AnsiString
के रूप में मानचित्रित कर सकते हैं।
<property name="MyBigUnicodeColumn" type="string" length="1000000"/>
<property name="MyBigAnsiColumn" type="AnsiString" length="1000000" />
जब भी लंबाई क्रमश तो 4000 या 8000 में बड़ा है, राष्ट्रीय राजमार्ग एक nvarchar (अधिकतम) या VARCHAR (अधिकतम) पैदा करता है।
मुझे लगता है कि लंबाई एसक्यूएल पैरामीटर के लिए उपयोग की जाती है और यह निर्दिष्ट लंबाई तक छोटा हो जाता है (यह आपके द्वारा उपयोग किए जा रहे एनएच संस्करण पर निर्भर करता है, कुछ बदलाव हुए हैं)। तो इसे काफी बड़ा निर्दिष्ट करें।
संपादित: दुर्भाग्य से, यह एक ही AnsiString सामान्य तार के साथ के रूप में साथ काम नहीं करता। मैंने कुछ एनएच कोड पढ़े और निम्नलिखित पाया:
वर्कर (अधिकतम) SQL सर्वर 2005 से बोली द्वारा समर्थित है।
MsSql2000Dialect.cs, लाइन 205
RegisterColumnType(DbType.AnsiString, SqlClientDriver.MaxSizeForLengthLimitedAnsiString, "VARCHAR($l)");
MsSql2005Dialect.cs, रेखा 19:
RegisterColumnType(DbType.AnsiString, SqlClientDriver.MaxSizeForAnsiClob, "VARCHAR(MAX)");
यह varchar (max) पंजीकृत करता है एसक्यूएल प्रकार के रूप में जब एक AnsiString बड़ा मैप किया गया है चुनने के लिए तो 8000.
SqlClientDriver.cs में आप देख सकते हैं कि यह तारों के लिए पैरा में "ब्लब्स" लागू करता है, लेकिन ansi तारों (लाइन 135) के लिए नहीं:
case DbType.AnsiString:
case DbType.AnsiStringFixedLength:
dbParam.Size = MaxSizeForLengthLimitedAnsiString;
break;
// later on
case DbType.String:
case DbType.StringFixedLength:
dbParam.Size = IsText(dbParam, sqlType) ? MaxSizeForClob : MaxSizeForLengthLimitedString;
break;
यह हमेशा 8000 को AnsiString प्रकार के पैरामीटर की सीमा के रूप में रखता है।
ड्राइवर और बोली के बीच असंगतता के कारण, मैं इसे एक बग कहूंगा।
क्योंकि सभी AnsiStrings पर बग होता है, यह मैपिंग में एसक्यूएल-प्रकार निर्दिष्ट करने में मदद नहीं करता है (एनएच सही एसक्यूएल प्रकार चुनने में सक्षम है)।https://nhibernate.jira.com/browse/NH-3252
AnsiString परिभाषा के द्वारा एक गैर यूनिकोड स्ट्रिंग है, इसलिए इस टूट नहीं किया जाना चाहिए। मुझे लगता है कि यह केवल तभी बदल जाएगा जब भविष्य में एसक्यूएल सर्वर निर्दिष्ट लंबाई में स्ट्रिंग या एन्सी स्ट्रिंग को स्टोर करने के नए तरीकों की पेशकश करेंगे। –
दूसरी तरफ, यह सभी बोलीभाषा में लागू किया गया है, और अपनी खुद की बोली रखना काफी आसान है। –
यह आपके द्वारा उपयोग किए जा रहे एनएच संस्करण पर निर्भर करता है। एसक्यूएल सर्वर प्रश्नों का पुन: उपयोग करने के लिए पैरामीटर पारित करते समय वे लंबाई निर्दिष्ट करते हैं। SQL सर्वर क्लाइंट डेटा काटने के लिए उपयोग किया जाता था, जो बहुत खराब था, इसलिए लंबाई की जांच करें। यदि आप छेद 2 जीबी अधिकतम लंबाई का उपयोग करना चाहते हैं, तो इसे इस तरह निर्दिष्ट करें ... –