2010-06-03 38 views
6

सेट करना मेरे पास एक उपयोगकर्ता तालिका है जहां "आईडी" फ़ील्ड एक GUID फ़ील्ड है।मैन्युअल रूप से आईडी

एएसपीएनईटी का उपयोग करके मैं एक उपयोगकर्ता खाता बना रहा हूं और GUID वापस प्राप्त कर रहा हूं। मैं मुख्य आईडी के रूप में उस GUID के साथ अपनी तालिकाओं में संबंधित रिकॉर्ड बनाने की कोशिश कर रहा हूं।

जिस समस्या में मैं दौड़ रहा हूं वह यह है कि जब मैं मैन्युअल रूप से उपयोगकर्ता सेट करता हूं। आईडी NHibernate एक अद्यतन करने की कोशिश करता है, न कि एक सम्मिलित करें। मैं इसे "अप्रत्याशित पंक्ति गणना: 0; अपेक्षित: 1" के साथ बम से पहले एनएचबेर्नेट प्रोफाइलर के साथ देखता हूं।

तालिका उपयोगकर्ताओं के लिए मेरे UsersMap की तरह दिखता है:

public class UsersMap : ClassMap<Users> 
{ 
    public UsersMap() 
    { 
     Id(x => x.ID, "ID"); //GUID 

     Map(x => x.Name, "Name"); //string 
     Map(x => x.PhoneNumber, "PhoneNumber"); //string 
     Map(x => x.FaxNumber, "FaxNumber"); //string 
     Map(x => x.EmailAddress, "EmailAddress"); //string 

     HasMany<UsersAddressBook>(x => x.usersAddressBook).KeyColumn("ID"); 
    } 
} 

कोई भी विचार? अग्रिम में धन्यवाद।

उत्तर

16

आपको यह निर्दिष्ट करने की आवश्यकता है कि आपकी आईडी असाइन की जाएगी।

Id(x => x.ID) 
    .GeneratedBy.Assigned(); 

इससे आपको NHIernate अद्यतन को करने का प्रयास किए बिना मूल्य निर्दिष्ट करने की अनुमति मिल जाएगी।

+0

यह प्रतीत होता है सबसे अच्छी विधि बनें। यह पूरी तरह से काम करता है। आपकी मदद के लिए धन्यवाद। –

1

ISession.Save में एक अधिभार है जो आपको पहचानकर्ता निर्दिष्ट करने की अनुमति देता है। इसका उपयोग करने का प्रयास करें, और अपनी आईडी प्रॉपर्टी मैन्युअल रूप से सेट न करें।

0

जेम्स का जवाब मैं प्रयोग किया जाता करने के लिए जोड़ा मूल्य के रूप में:

Id(x => x.ID) 
    .GeneratedBy.Assigned() 
    .UnsavedValue(default_value); 

ध्यान दें कि DEFAULT_VALUE अपने आईडी प्रकार के लिए डिफ़ॉल्ट मान है
मुझ में के रूप में 0L क्योंकि मैं अपने ईद के लिए long का उपयोग

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