2012-03-13 10 views
5

मैं ब्राउनफील्ड डेटाबेस के साथ काम कर रहा हूं जो प्राथमिक कुंजी के रूप में स्ट्रिंग का उपयोग करता है। फ्लूएंट एनएचबेर्नेटएसक्लाइट (यूनिट परीक्षण के लिए मेमोरी प्रदाता) और SQL सर्वर 2005 का उपयोग करना।स्ट्रिंग कुंजियों का उपयोग कैसे करें (धाराप्रवाह) NHibernate

मैं निम्नलिखित इकाई है: इस मानचित्रण के साथ

public class Entity 
{ 
    public virtual DateTime TimeStamp { get; set; } 

    public virtual string Name { get; set; } 
} 

:

public class EntityMap : ClassMap<Entity> 
{ 
    public EntityMap() 
    { 
     Map(_ => _.TimeStamp); 
     Id(_ => _.Name).CustomType("AnsiString"); 
    } 
} 

हालांकि यह काम नहीं करता कह NHibernate.TypeMismatchException : Provided id of the wrong type. Expected: System.Int32, got System.String

यह कैसे काम है? इसके अलावा, क्या फ्लेंट निबर्ननेट उपलब्ध होने के बारे में कोई अच्छा दस्तावेज है?

अग्रिम धन्यवाद।

+0

लिंक के लिए Thx हालांकि वे न तो मेरे लिए नया है और न ही मेरे सवाल से संबंधित कुछ भी शामिल :) मैं स्ट्रिंग कुंजियों के बारे में कुछ भी खोजने के लिए सक्षम नहीं था क्या आप वहां मौजूद हैं। इसके अलावा मैं स्पष्ट मैपिंग के साथ शुरू करना चाहता हूं। –

+0

इस लिंक में इस चर्चा में चर्चा की गई है http://stackoverflow.com/questions/411825/nhibernate-with-string-primary-key-and-relationships –

+0

@krystanhonour बिल्कुल नहीं। इसके अलावा उस प्रश्न का कोई स्वीकार्य उत्तर नहीं है। यदि आप उत्तर को पहचान सकते हैं तो क्या आप इसे यहां दोबारा पोस्ट कर सकते हैं और वोट-अप और मेरी प्रशंसा प्राप्त कर सकते हैं? धन्यवाद। –

उत्तर

12

आप तार अपनी प्राथमिक कुंजी के रूप में आप शायद कुछ इस तरह करना होगा उपयोग कर रहे हैं:

public class EntityMap : ClassMap<Entity> 
{ 
    public EntityMap() 
    { 
     Id(x => x.Name).GeneratedBy.Assigned(); 
     Map(x => x.TimeStamp); 
    } 
} 

nhibernate प्रलेखन से:

5.1.4.7। असाइन किए गए पहचानकर्ता

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

अपनी अंतर्निहित प्रकृति के कारण, इस जनरेटर का उपयोग करने वाली संस्थाएं ISession की SaveOrUpdate() विधि के माध्यम से सहेजी नहीं जा सकती हैं। इसके बजाय आपको को स्पष्ट रूप से एनएचबीर्नेट को निर्दिष्ट करना होगा यदि ऑब्जेक्ट को सहेजा जाना चाहिए या ISession की सेव() या अपडेट() विधि को कॉल करके अपडेट किया गया है।

यहां एक संबंधित लेख भी है। यह एक बिट दिनांकित है, लेकिन अभी भी अपनी स्थिति पर लागू होता है:,

http://groups.google.com/group/fluent-nhibernate/browse_thread/thread/6c9620b7c5bb7ca8